首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 5.1 中引入部分有用新特性

Swift 5.1 - 简书 1、函数、闭包单表达式函数返回 现在,在声明仅包含单个表达式函数和计算属性时,可以省略return关键字,这使得在声明更简单便捷API时非常友好: //单行表达式...,不会生成有可选属性参数构造函数,现在可以struct Message { var title: String var info: "body" } 在swift 5.1 中,下方初始化方法均正确...我们甚至还可以在方法或属性中使用Self内联,同时使用返回,进一步使上述代码更加紧凑: extension TextTransform { static var capitalize: Self...7、字符串新协议ExpressibleByStringInterpolation——使类型可以使用字符串 为诸如字符串和整数之类原始创建包装器类型,是使我们代码更具类型安全性和自记录性好方法...String) { self.string = value } } try loadFile(at: "~/documents/article.md") 这样已经非常好了,但是如果我们在字符串中使用任何形式

1.3K20

Sendable 和 @Sendable 闭包代码实例详解

Sendable协议和闭包表明那些传递公共API是否线程安全向编译器传递了。当没有公共修改器、有内部锁定系统或修改器实现了与类型一样复制写入时,公共API可以安全地跨并发域使用。...标准库中许多类型已经支持了Sendable协议,消除了对许多类型添加一致性要求。由于标准库支持,编译器可以为你自定义类型创建一致性。...// 地遵守了 Sendable 协议 struct Article { var views: Int } 与此同时,同样 Article 内容类,将不会有遵守该协议: // 不会遵守...struct Container { var child: Value } 对于有关联枚举也是如此: 如果枚举们不符合 Sendable 协议,...例如,你可以在例如 Swift package这样模块中定义以下类型: public struct Article { internal var title: String } Article

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

Swift Sendable 和 @Sendable 闭包

Sendable协议和闭包表明那些传递公共API是否线程安全向编译器传递了。当没有公共修改器、有内部锁定系统或修改器实现了与类型一样复制写入时,公共API可以安全地跨并发域使用。...标准库中许多类型已经支持了Sendable协议,消除了对许多类型添加一致性要求。由于标准库支持,编译器可以为你自定义类型创建一致性。...// 地遵守了 Sendable 协议 struct Article { var views: Int } 与此同时,同样Article内容类,将不会有遵守该协议: // 不会遵守...struct Container { var child: Value } 对于有关联枚举也是如此: 如果枚举们不符合 Sendable 协议,Sendable...例如,你可以在例如 Swift package这样模块中定义以下类型: public struct Article { internal var title: String } Article

1.3K30

万字长文|Swift语法全面解析|附示例

Swift 通过采用现代编程模式来避免大量常见编程错误: 变量始终在使用前初始化。 检查数组索引超出范围错误。 检查整数是否溢出。 可选确保明确处理 nil 。 内存被自动管理。...字符串字面量,字符串,计算字符数量,访问和修改字符串,子字符串,比较字符串 初始化空字符串字符串可变性,字符串类型,连接字符串和字符(+,+=)。...使用字符,可通过 for-in 循环来遍历字符串,获取字符串中每一个字符字符串是一种构建新字符串方式,可以在其中包含常量、变量、字面量和表达式。...可以在已有字符串中插入常量、变量、字面量和表达式从而形成更长字符串Swift 提供了三种方式来比较文本字符串字符相等、前缀相等和后缀相等。...{} // private 类成员 } 高级运算符 Swift还提供了数种可以对数值进行复杂运算高级运算符。

3.2K21

Swift 4.0 新特性

减少 @objc 自动推断 在项目中想把 Swift API 暴露给 Objective-C 调用,需要增加 @objc。...在 Swift 3 中,编译器会在很多地方为我们加上 @objc,例如当一个类继承于 NSObject,那么这个类所有方法都会被加上 @objc。...class MyClass: NSObject { func print() { ... } // 包含 @objc func show() { ... } // 包含 @objc...} 在 Swift 4 中, @objc 自动推断只会发生在很少的当必须要使用 @objc 情况,比如: 复写父类 Objective-C 方法 符合一个 Objective-C 协议 其它大多数地方必须手工显示加上...减少了 @objc 自动推断后,Apple Music app 包大小减少了 5.7%。 兼容 Xcode 9 中同时集成了 Swift 3.2 和 Swift 4。

1.7K90

Swift 5.4 新特性

改进成员语法 SE-0287(https://github.com/apple/swift-evolution/blob/main/proposals/0287-implicit-member-chains.md...) 提高了 Swift 使用成员表达式能力,不仅支持引用静态成员,还可以为其建立链式调用。...Swift 一直具有对简单表达式使用成员语法能力,例如,如果您想在 SwiftUI 中为某些文本着色,则可以使用 .red 而不是 Color.red: struct ContentView1:...但是,我们可以创建一个 Result 构建器,该构建器了解如何使用所需任何转换将多个字符串转换为一个字符串,如下所示: @resultBuilder struct SimpleStringBuilder...值得补充是,Swift 5.4 扩展了结果生成器系统以支持放置在存储属性上属性,该属性会自动调整结构成员初始设定项以应用结果生成器。

1.6K40

Swift基础语法(常量变量、数据类型、元组、可选、断言)

Swift字符串(string interpolation)方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量替换这些占位符。...注意:字符串所有可用选项,请参考字符串。 注释 请将你代码中非执行文本注释成提示或者笔记以方便你将来阅读。Swift 编译器将会在编译代码时自动忽略掉注释部分。...在 Swift 中,nil不是指针——它是一个确定,用来表示缺失。任何类型可选都可以被设置为nil,不只是对象类型。 解析可选 如上所述,可选暗示了常量或者变量可以“没有”。...解析可选主要被用在 Swift 中类构造过程中,请参考类实例之间循环强引用。 一个解析可选其实就是一个普通可选,但是可以被当做非可选来使用,并不需要每次都使用解析来获取可选。...注意:如果一个变量之后可能变成nil的话请不要使用解析可选。如果你需要在变量生命周期中判断是否是nil的话,请使用普通可选类型。

1.9K90

Swift学习总结

2、溢出操作符——&+,&-,&*,Swift哲学是触发陷阱比潜在安全漏洞要好 3、字符串支持\(var)占位符,支持复合赋值操作符+=连接字符串 4、swift必须手动转换类型,不会自动类型转换...展开可空类型与普通可空类型重要区别就是不需要展开,使用上不需要if条件语句了。如果这种展开可空类型没有的话,访问其会直接导致运行时错误。...建议如果某个实例可能为nil,就不要使用展开可空类型。 23、实例后面跟问号?——可空链式调用,与可空实例绑定类似,两者重要区别是,可空链式调用允许把多个查询串联为一个可空实例。...感叹号表示返回展开可空类型实例,其使用起来方便(不需要写可空类型展开语法),但不如跟随问号安全。 19、在被赋给另一个实例或是作为参数传递给函数时,类型总是被复制。...Swift是不可以访问实例引用计数,但是有个函数(isKnownUniquelyReferenced)可以判断一个实例是否是对某个实例唯一引用。

2.9K20

Swift进阶二:基本数据类型相关

count //print(count) // 6 //展开 //⚠️有些可选项一旦被设定之后,就会一直拥有,此时就不必每次访问时候都进行展开 //通过在声明类型后面添加一个叹号来展开可选项...字符串相关 Raw String中字符串 let sum = 3 + 4 let result1 = "sum is \(sum)" // sum is 7 let result2 = #"sum...public struct Index { } 我们可以看到,Index实际上是一个结构体。...Swift中,使用下标或者类似prefix等方法得到字符串是Substring类型。Substring拥有String大部分方法。Substring也可以转成String。...Swift中为什么要单独拉一个SubString出来呢?很大程度上是出于性能考量。 ? 在Swift中,子字符串会重用一部分原字符串内存。

80530

Swift基础 基础知识

Swift使用字符串将常量或变量名称作为占位符包含在较长字符串中,并提示Swift将其替换为该常量或变量的当前。...注意 可用于字符串所有选项都在字符串中描述。 注释 使用注释在您代码中包含不可执行文本,作为对您自己便条或提醒。编译代码时,Swift编译器会忽略注释。...以下示例显示了可选字符串未包装可选字符串在以显String形式访问其包装行为差异: let possibleString: String?...当您使用展开可选时,Swift首先尝试将其用作普通可选;如果不能用作可选Swift将强制解开该。...} // Prints "解除包装可选字符串。"

10600

Swift基础语法

Swift字符串(string interpolation)方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量替换这些占位符。...注意:字符串所有可用选项,请参考字符串。 注释 请将你代码中非执行文本注释成提示或者笔记以方便你将来阅读。Swift 编译器将会在编译代码时自动忽略掉注释部分。...在 Swift 中,nil不是指针——它是一个确定,用来表示缺失。任何类型可选都可以被设置为nil,不只是对象类型。 解析可选 如上所述,可选暗示了常量或者变量可以“没有”。...解析可选主要被用在 Swift 中类构造过程中,请参考类实例之间循环强引用。 一个解析可选其实就是一个普通可选,但是可以被当做非可选来使用,并不需要每次都使用解析来获取可选。...和你在没有普通可选后面加一个惊叹号一样。 你仍然可以解析可选当做普通可选来判断它是否包含: [objc] view plain copy print?

1.4K60

窥探Swift之需要注意基本运算符和高级运算符

2.类型安全性,不允许类型转换     这一点也是Swift语言一个优势,在Swift语言中是不允许你使用类型转换。即便是Double类型和Float类型进行类型转换也是不可以。...而在Objective-C中是可以进行类型转换。看下方实例:     在Objective-C中你可以这样做, 下方代码是可以编译通过。...错误大致意思就是你不能把Float32类型数据与Float64类型数据进行相加。其本质原因是在Swift语言中是不允许你进行类型 ?     ...在Swift中你可以使用比较运算符来比较字符串,如下所示: ?   6.区间运算符     区间运算符可以表示两个之间范围。......我们还可以使用异或运算来判断两个是否相等,如果两个数异或后为0,那么两个数就相等,具体代码如下所示: 1 if swap1 ^ swap2 == 0 { 2 print("swap1 ==

1K50

Swift教程(一)--基础内容

var name: String = "dapeng" print(name) //输出 dapeng Swift 使用字符串 方式来把常量名或者变量名当做占位符加入到更长字符串中,然后让 Swift...一个用来获取网页函数可能会返回一个 (Int, String) 元组来描述是否获取成功。相比只能返回一个类型,元组能包含两个不同类型,他可以让函数返回信息更有用。...任何类型都可以明确声明为(或者转换)可选类型。当声明一个可选类型时候,要确保用括号给 ? 操作符一个合适范围。 可选类型声明 var optionalStr: String?...进行强制解析 }else{ print("字符串为nil") } 可选项绑定 使用可选绑定,摆脱了频繁判断是否为nil在赋值,但是使用可选绑定(optional binding)来判断可选类型是否包含...nil") } 展开可选项 在最初声明时使用?

1.2K30

Swift 基础之可选

四:解析可选 如上所述,可选暗示了常量或者变量可以“没有”。可选可以通过 if 语句来判断是否,如果有的话可以通过可选绑定来解析。...)来声明一个解析可选。 当可选被第一次赋值之后就可以确定之后一直有时候,解析可选非常有用。 解析可选主要被用在 Swift 中类构造过程中,请参考类实例之间循环强引用。...一个解析可选其实就是一个普通可选,但是可以被当做非可选来使用,并不需要每次都使用解析来获取可选。...你可以解析可选当做一个可以自动解析可选。你要做只是声明时候把感叹号放到类型结尾,而不是每次取值可选名字结尾。 注意:如果你在解析可选没有时候尝试取值,会触发运行时错误。...和你在没有普通可选后面加一个惊叹号一样。 你仍然可以解析可选当做普通可选来判断它是否包含: if (assumedString !

75930
领券