Swift5.0新特性更新

Xcode 13.0配置包详解与应用指南 本文还有配套的精品资源,点击获取 简介:Xcode是苹果公司的集成开发环境,专为iOS、macOS等Apple平台设计。Xcode 13.0版本引入了新特性和改进,以提升开发效率和应用质量。本文详细解析了Xcode 13.0配置包,包括其在不同Apple设备操作系统版本支持中的关键作用,特别是对iOS 13.0的支持。更新内容涉及Swift 5.3语言特性、Interface Builder改进、App Clips功能、构建系统优化、TestFlight集成、Source Con 阅读详情

Swift

  • 原文博客地址: Swift 5.0新特性更新
  • 期待已久的Swift 5.0终于来啦, Swift 5.0是Swift中最备受关注的一个版本, 传说中ABI稳定的版本
  • 随着Xcode Bate 10.2的发布, Swift 5.0也发布了测试版, 相信也带来了很多优化和改进
  • 下面运行环境都是在Xcode Bate 10.2环境中进行的

新特性

dynamicCallable

  • SE-0216
  • @dynamicCallable为Swift添加了一个新属性, 允许使用一个简单的语法糖调用函数一样调用命名类型
  • 如果需要添加@dynamicCallable属性, 就必须要实现以下方法中的一个或者两个
func dynamicallyCall(withArguments args: [Int]) -> Double

func dynamicallyCall(withKeywordArguments args: KeyValuePairs<String, Int>) -> Double
  • 注意点:
  • 除了接受各种输入外,您还可以为各种输出提供多个重载, 自定义返回值, 可以是String, Int等等…
  • KeyValuePairs的使用和介绍, 没有使用过的可参考

下面看一个例子, RandomNumberGenerator生成一个随机数

Swift 5.0之前的定义和调用方式

// 定义方式
struct RandomNumberGenerator {
    func generate(numberOfZeroes: Int) -> Double {
        let maximum = pow(10, Double(numberOfZeroes))
        return Double.random(in: 0...maximum)
    }
}


// 调用方式
let random = RandomNumberGenerator()
let num = random.generate(numberOfZeroes: 2)
print(num)

在Swift 5.0使用@dynamicCallable属性

// 定义方式
@dynamicCallable
struct RandomNumberGenerator {
    func dynamicallyCall(withArguments args: [Int]) -> Double {
        let numberOfZeroes = Double(args.first ?? 0)
        let maximum = pow(10, numberOfZeroes)
        return Double.random(in: 0...maximum)
    }
}


// 调用方式
let random = RandomNumberGenerator()
let num = random(2)
// random(2)等同于random.dynamicallyCall(withArguments: [2])
print(num)
  • @dynamicCallable使用注意事项
  • 可以将它应用于结构,枚举,类和协议。
  • 如果你实现withKeywordArguments:并且没有实现withArguments:,你仍然可以在没有参数标签的情况下调用
  • 如果你的实现withKeywordArguments:或withArguments:时标记为throw,则调用该类型也将被抛出throw
  • 扩展名无法添加@dynamicCallable,只能添加到主要类型上
  • 仍然可以为你定义的类型添加其他方法和属性,并且能够正常使用

WritableKeyPath

  • SE-0227
  • 添加引用标识键路径的功能,该路径指的是应用它的整个输入值
  • Swift中的每个值都有一个特殊的伪属性.self,它指的是整个值
let id = \Int.self  
var x = 1
print(id)   ////Swift.WritableKeyPath<Swift.Int, Swift.Int>
x.self = 2
print(x)   //2
print(x.self)  //2

print(x[keyPath: id])  //2
x[keyPath: id] = 3
print(x[keyPath: id])  //3

可选参数

在Swift 5之前,可以编写一个带有可变参数的枚举, 但是在Swift 5开始, 调用时会报错, 如下

enum X {
    // 此处定义切没有调用时不会报错
    case foo(bar: Int...) 
}

func baz() -> X {
    // 此处调用时会报错
    return .foo(bar: 0, 1, 2, 3) 
} 

在Swift 5之后, 上述定义改成数组参数, 而不是可变参数, 如下

enum X {
    case foo(bar: [Int]) 
} 

func baz() -> X {
    return .foo(bar: [0, 1, 2, 3]) 
} 

Raw Strings

\处理
  • SE-0200增加了创建原始字符串的功能,其中反斜杠和引号被解释为文字符号,而不是转义字符或字符串终止符
  • 单行字符串文字可以用反斜杠填充, 以保证原字符串, 否则会报错
// 文字引用类型
// 错误写法
let quote = "Alice: "How long is forever?" White Rabbit: "Sometimes, just one second.""
// 正确写法
let quote1 = "Alice: \"How long is forever?\" White Rabbit: \"Sometimes, just one second.\""


// 正则表法式类型
// 错误写法
let ucCaseCheck = "enum\s+.+\{.*case\s+[:upper:]"
// 正确写法
let ucCaseCheck = "enum\\s+.+\\{.*case\\s+[:upper:]"
#处理
  • 要使用原始字符串, 可使用#将字符串包裹起来
  • #字符串开头和结尾的符号成为字符串分隔符的一部分,因此如下Swift理解“rain”和“Spain”周围的独立引号应该被视为文字引号而不是结束字符串
  • 原始字符串也允许使用反斜杠, 但是将反斜杠视为字符串中的文字字符,而不是转义字符
let rain = #"The "rain" in "Spain" falls mainly on the Spaniards."#

let keypaths = #"Swift keypaths such as \Person.name hold uninvoked references to properties."#

let answer = 42
let dontpanic = #"The answer to life, the universe, and everything is \#(answer)."#

注意: 上面使用\#(answer)引用变量而不是\(answer), 因为在用#包裹的字符串中反斜杠将会被失败别为文字字符而不是转义字符, 所以必须额外的添加#

##处理
  • 在字符串的开头和结尾使用#处理, 在字符串中可以使用反斜杠等特殊字符, 那如果字符串中需要使用#, 又该如何处理??
  • 使用#包裹字符串, 默认会以#为字符串的结束符号, #后面的文字将不再处理, 在这种情况下, 我们会使用##处理
  • 注意: 字符串的开头和结尾的标识必须一样
let str = ##"My dog said "woof"#gooddog"##

多行字符串

原始字符串与Swift的多行字符串系统完全兼容 - 只需用于#"""启动,然后"""#结束

let multiline = #"""
    The answer to life,
    the universe,
    and everything is \#(answer).
    """#

try?嵌套

先看下面代码

struct User {
    var id: Int

    init?(id: Int) {
        if id < 1 {
            return nil
        }

        self.id = id
    }

    func getMessages() throws -> String {
        // complicated code here
        return "No messages"
    }
}

在Swift4.2及其之前的版本中

let user = User(id: 1)
// 这里得到的message的类型是: let messages: String??
let messages = try? user?.getMessages()

// 如果我们想得到非可选值就需要
print((messages ?? "") ?? "")
// 或者多次强解, 当然不建议强解写法
print(messages!!)
  • 在Swift4.2及其之前的版本中, 上面返回的是一个2层嵌套的可选值, 如果有多层嵌套处理起来也是相当更麻烦的
  • 在Swift 5中就完美的解决了这个问题, 如果当前值是可选的, 那么try?将不会将值包装在可选值中, 因此最终结果只是一个String?
  • 因此在Swift 5中无论有多少可嵌套的可选最后, 返回值永远只是一个可选值
  • 同样,如果你使用了可选的链接as?,你仍然只有一个级别的可选性
let user = User(id: 1)
// 类型: let messages: String?
let messages = try? user?.getMessages()

print(messages ?? "")

isMultiple

  • SE-0225为整数类型添加了一个方法isMultiple
  • 该方法可以检查一个证书是否为另一个整数的倍数
let rowNumber = 4

if rowNumber.isMultiple(of: 2) {
    print("Even")
} else {
    print("Odd")
}

// 该方法等效于
if rowNumber % 2 == 0 {}

count

  • SE-0220
  • 在Swift之前的版本中, 有一个函数filter可以过滤出数组中符合条件的的元素, 组成一个新的数组, 详细使用可参考Swift函数式编程之高级用法
  • 在Swift 5中新增了一个函数count(where:), 可以获取数组中符合条件的元素的个数
let arr = [1, 2, 34, 5, 6, 7, 8, 12, 45, 6, 9]

let filter = arr.filter({ $0 > 10 })
print(filter)  //[34, 12, 45]

let count = arr.count(where: { $0 > 10 })
print(count)  // 3

compactMapValues

  • 在Swift4.x的版本有两个函数compactMap和mapValues
  • compactMap: 返回一个操作后得到的新的数组, 类似flatMap
  • mapValues: 字典中的函数, 对字典的value值执行操作, 返回改变value后的新的字典
let times = [
    "first": 2,
    "second": 43,
    "three": 12,
    "four": 3
]

let compact = times.compactMap({ $0.value > 10 })
print(compact)
// [true, false, true, false]

let mapValues = times.mapValues({ $0 + 2 })
print(mapValues)
// ["second": 45, "first": 4, "three": 14, "four": 5]
  • SE-0218在Swift 5中新增了一个函数compactMapValues
  • compactMapValues是将上述两个方法的功能合并在一起, 返回一个对value操作后的新字典, 并且自动过滤不符合条件的键值对
let times1 = [
    "Hudson": "38",
    "Clarke": "42",
    "Robinson": "35",
    "Hartis": "DNF"
]

let comMap2 = times1.compactMapValues({ Int($0) })
print(comMap2)
// ["Clarke": 42, "Robinson": 35, "Hudson": 38]

SubSequence

  • Sequence协议不再具有SubSequence关联类型。先前返回SubSequence的Sequence方法现在会返回具体类型
  • 使用SubSequence的Sequence扩展应该修改为类似地使用具体类型,或者修改为Collection的扩展,在Collection中SubSequence仍然可用
// swift 5不在支持
extension Sequence {
    func dropTwo() -> SubSequence {
        return self.dropFirst(2)
    }
}


// 建议改为
extension Sequence {
    func dropTwo() -> DropFirstSequence<Self> { 
        return self.dropFirst(2)
    }
}

// 或者
extension Collection {
    func dropTwo() -> SubSequence {
        return self.dropFirst(2)
    }
}

其他相关更新

SE-0214

DictionaryLiteral类型重命名为KeyValuePairs

SE-0238

  • 在使用Swift 5软件包管理器时,Targets可以声明一些常用的针对特定目标的build settings设置
  • 新设置也可以基于平台和构建配置进行条件化处理。包含的构建设置支持Swift和C语言定义,C语言头文件搜索路径,链接库和链接框架

SE- 0236

  • 在使用Swift 5时, 可以自定义所支持的最低版本号, 如果该项目的依赖包所支持的最低版本大于项目的最低版本号, 则项目会报错

SR-695

在Swift 5中不再支持返回Self的类方法

// 不在支持
class Base { 
    class func factory() -> Self { /*...*/ }
} 

SR-631

不同文件中的扩展名无法相互识别

class FirstClass { }

extension FirstClass {
    class SecondClass { }
}

// 这里将会报错: "SecondClass is not a member type of FirstClass"
extension FirstClass.SecondClass { 
    class ThirdClass { }
}

SR-7251

在Swift 5中, 在所声明的类里面, 所声明的变量名不能和类名一样

struct S {}
extension S {
  static var i: Int { return 0 }
  struct i {} // error: “i”的声明无效
}

// 下面的方式是没有问题的
struct S1<T> {}
extension S1 {
  static var i: Int { return 0 }
  struct i {} // This is fine!
}

参考文献


swift-一个使用@dynamicCallable实现的SwiftObjective-CBridge 一个使用@dynamicCallable实现的Swift Objective-C Bridge 立即下载

相关推荐

Swift5.1中文版.pdf

swift5 中文文档,官方出版,swift语法大全,IOS开发入门,swift开发入门,xcodeswift5,swift新手指南

Swift5 语法学习

swift函数学习

weixin_44166922的博客 1030

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2798

Swift编程语言各大版本发布时间汇总表

版本号 时间 Swift 1.0 2014-08-18 Swift 1.1 2014-10-16 Swift 1.2 2015-04-08 Swift 2.0 2015-09-16 Swift 2.1 2015-10-20 Swift 2.2 ...

学习小使者 的专栏 4451

利用SPSS实现逻辑回归,树模型,以及广义线性模型

本案例是IBM SPSS数据分析与挖掘实战案例精粹----第九章的学习记录 案例背景:分析出导致急救后迟发性颅脑损伤的主要影响因素,共有201项案例: 分析思路:先使用logistic回归模型进行影响因素筛选,然后利用分类树探索自变量中是否存在交互作用,最后利用广义线性模型过程拟合带交互项的Logistic回归模型 字段:性别,年龄,收缩压,舒张压,血小板,脑挫伤,中线位移,脑肿胀,入院意识,是否手术急救,其余急救措施,是否出现迟发性脑损伤; ...

hepan_defeng的博客 1万+

032、准谐振反激变换器(QR-Flyback)原理

文章摘要: 本文以65W PD快充炸管案例切入,解析准谐振反激变换器(QR-Flyback)原理。通过主动利用漏感与MOS结电容的谐振,在Vds波谷开通实现近似ZVS,显著降低开关损耗与电压应力。对比传统反激,QR模式轻载效率提升8%,Vds尖峰减少23%。关键设计要点包括:变压器漏感需<3%、谷底检测电路需抗干扰、启动阶段需防过冲。推荐NCP1340等专用控制芯片,并强调VCC电容优选低ESR陶瓷材质。QR适用于30W-150W场景,其核心优势在于轻载效率优化,但需平衡漏感控制与可靠性。作者结合实测数据与

Jack010169的博客 112

Swift5编程总结

这样做的好处是,在定义公共接口的时候,可以明确地选择哪些接口是需要公开的,哪些是内部使用的,避免不小心将内部使用的接口公开。可以在子类中提供这些构造器的自定义实现,当在编写一个和父类中指定构造器相匹配的子类构造器时,实际上是在重写父类的这个指定构造器。如同前面提到的默认构造器,如果希望一个 public 级别的结构体也能在其他模块中使用其默认的成员逐一构造器,依然只能自己提供一个 public 访问级别的成员逐一构造器。默认构造器的访问级别与所属类型的访问级别相同,除非类型的访问级别是 public。

jiuchabaikaishui的专栏 594

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

swift中文文档_重磅!!!Swift 5.0 官方文档中文版新鲜出炉

SwiftGG翻译组最近偷偷搞了个大事情,是什么呢?是大家期待已久的 Swift 5.0 官方文档中文版以下是电脑上的效果:以下是手机上的效果SwiftGG翻译组一直致力于精品技术文章的翻译,并一直主持 Swift 官方文档的翻译工作,从 1.0 到现在的 5.0,其间许多贡献者参与翻译和校对。感谢所有贡献者。SwiftGG 官方网站:https://swift.gg/SwiftGG g...

weixin_39614094的博客 5392

yolov5改进之Fasternet主干网络替换

fasternet替换yolov5主干网络

qq_41920323的博客 5143

记录Rancher集群中coredns问题导致的服务DNS解析超时

coredns问题处理

1359

[Swift]编程语言:文档修订历史

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30613727的博客 239

windows下玩转vllm:在wsl下安装vllm

当前,部署通义千问2.5-vl已经是一件箭在弦上,不得不发的事儿了。网上搜了一下,发现还是用vllm用的比较多。于是乎,这就开始尝试部署vllm。但是我们之前说了,vllm是不支持直接在windows上部署的,我们还得搞wsl或者docker。咱今天先尝试使用wsl进行安装哈。

xiezhipu的博客 4136

Pageboy迁移指南:从旧版本升级到v5.0的完整步骤

Pageboy是一款简单且功能丰富的页面视图控制器,广泛应用于iOS应用开发中。本指南将帮助开发者顺利从旧版本升级到v5.0,掌握最新功能与API变化,确保应用无缝过渡。 ## 📋 升级前准备 在开始升级前,请确保开发环境满足以下要求: - iOS 10.0+ - Xcode 12.0+ - Swift 5.0+ 建议先备份现有项目代码,以便在遇到问题时可以快速回滚。同时,通过以下命令克隆

gitblog_00340的博客 382

12.工具高级参数CogCalibNPointToNPointTool

CogCalibNPointToNPointTool是一种多点2D坐标校正工具,用于将图像像素坐标转换为物理世界坐标。该工具通过两组点(图像坐标点和物理坐标点)计算最佳转换关系,并将结果保存供后续使用。操作步骤包括获取图像、添加坐标点对、计算转换参数。校正结果会显示平移、缩放、旋转等参数及RMS误差值,较大的误差可能表明点位置不准确或自由度不足。该工具广泛应用于机器视觉领域,通过9点标定等案例可验证坐标转换的准确性并优化参数设置。

203

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Swift 项目主管和大家聊了聊 Swift 5,ABI 稳定性最受关注

开发四年只会写业务代码,分布式高并发都不会还做程序员? 苹果在 2014 年发布了全新编程语言 Swift,到目前为止...

weixin_33911824的博客 95

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Swift语言新特性解析:从Swift 5.5到Swift 6.0的完整指南

Swift语言作为苹果生态系统的主力编程语言,近年来迎来了重大更新和功能增强。本文将深入解析Swift语言的最新特性,帮助开发者更好地掌握这门现代化的编程语言。Swift 5.5版本引入了革命性的并发编程模型,而Swift 6.0则进一步优化了性能和开发体验。 ## 🔥 Swift 5.5:异步编程的革命 Swift 5.5版本最大的亮点是引入了原生的async/await语法,彻底改变了并

gitblog_02839的博客 531

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Swift 5.9 有哪些新特性(一)

在本文中,将介绍这个版本中最重要的变化,提供代码示例和解释,以便可以自行尝试。需要在 Xcode 14 中安装最新的 Swift 5.9 工具链,或者使用 Xcode 15 beta。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 6035

Swift 4.0 编码规范,持续更新中...(已更新Swift 5.0)

自Swift 3.0 以来,语言已经比较成熟,用Swift语言来开发iOS App 的开发者越来越多,那么一份权威而全面的规范就很有必要了。苹果官方的文档一般都很少去看,笔者参考官方文档和各路大神的经验,写下了一份基于Swift 4.0 的编码规范,并会持续更新,欢迎大家补充指正。 编码格式 命名规范 语法规范 1. 编码格式 1.1 使用二元运算符(+, -,==,

Andy Coding 5637

[译] Swift 5.0 新特性

原文地址:What’s new in Swift 5.0 原文作者:Paul Hudson 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:iWeslie 校对者:DevMcryYu,swants Swift 5.0 是 Swift 的下一个主要的 release,随之而来的是 ABI 的稳定性,同时还实现了几个关键的新功能,包括...

box_kun的博客 435

Swift 5 新特性预览(最低支持Xcode 10.2 beta版)

万众期待的 Swift 5 终于来了,苹果爸爸答应的 ABI 稳定也终于来了。 小集新小伙伴 @NotFound-- 花时间将文档翻译出来,供大家参考。翻译不当之处,请及时留言指出,我们会持续更新。 App 瘦身 新特性 Swift 应用程序不再包含用于 Swift 标准库的动态链接库和用于运行 iOS 12.2,watchOS 5.2 和 tvOS 12.2 的设备的构建变体中的 Swift...

weixin_33989058的博客 1380

swift5.0的新特性

1 增加了# 符号,使字符串更加简单 1. 在字符串中包含“时不必添加\ 2 .包含\反斜杠也不需要再加转义符,直接前后加#号即可 3. 当字符串包含#时,前后应用##包裹字符串 4. 用#“”“”开头""""#结尾来表示多行字符串 正则表达式中因为不用反斜杠转义,使得正则表达式更加简洁明了 2 在枚举中新增加了一个@unknow 修饰default分...

BianHuanShiZhe的专栏 883

AlecrimCoreData未来路线图:Swift 5+与新特性展望

AlecrimCoreData 是一个强大而优雅的 Swift Core Data 框架,它让 Core Data 的使用变得简单而直观。作为 iOS 和 macOS 开发者的 Core Data 简化工具,AlecrimCoreData 已经在 Swift 社区中赢得了良好的声誉。本文将为您揭示这个框架的未来发展路线图,探讨 Swift 5+ 支持以及即将到来的新特性展望。🚀 ## 📊 A

gitblog_00375的博客 855

书号、书名、更新标识获取到的数量不一致_Swift 5 终于来了,快来看看有什么更新!!...

本文由 老司机iOS周报 授权发布Swift 5 Release Notes for Xcode 10.2Swift5 正式更新,官方提供了更新笔记说明,我们周报编辑团队的 @Tom 组织 @老老老老老老老驴,@小非86,@邦ben 和 @极速男孩 为大家做了第一手的翻译工作,方便大家了解这次对于 Swift 发展史很重要的一次迭代。另外,@Tom 所在的深圳头条研发中心正在招募各路好手...

weixin_39689428的博客 576
上一篇: JavaScript基本语法03
下一篇: Flutter的安装和配置
CodeTitan
博客等级 码龄9年 51粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值