首页
学习
活动
专区
圈层
工具
发布

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.6K20

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.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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.9K30

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

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

    4.1K22

    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。

    2K90

    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.9K40

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

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

    2.3K90

    Swift学习总结

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

    3.7K20

    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中,子字符串会重用一部分原字符串的内存。

    1K30

    Swift基础语法

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

    1.6K60

    Swift基础 基础知识

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

    92100

    iPhone 15 系列跌破 5000 元大关 | Swift 周报 issue 46

    该提案已在 四十二期周报 正在审查的提案模块做了详细介绍。Swift论坛1) 提议字符串插值的默认值内容概括该提案建议向 Swift 添加一项新功能,以解决涉及可选值的字符串插值的挑战。...目前,当在字符串中插入可选值时,开发人员面临警告和提供默认值的选项有限的问题。 所提出的解决方案建议引入新的字符串插值重载,该重载允许开发人员指定默认字符串,而不管可选值的类型如何。...介绍Pitch 建议在插入可选值时使用新的默认值字符串插入语法。动机字符串插值很强大,但在处理可选值时会变得复杂。当前的解决方案在处理可选值时涉及繁琐的代码或不需要的输出。...例子演示插入可选字符串和可选整数时的挑战。当前的解决方案涉及笨拙的代码或零合并运算符的限制。建议的解决方案引入新的插值重载,允许将预期默认值指定为字符串,而不管值的类型如何。...Int else { return false } return x == 0}x 参数是否带有类型标记来检查它是否可以在运行时向下转换?

    36332

    Swift 6.1 新特性

    尾随逗号 元组、函数的参数、闭包捕获列表以及字符串插值等都可以像数组一样,在最后一个元素的后面添加,,以便轻松地追加、删除、重新排列或者注释最后一个元素。...= "Car" // 闭包捕获列表 let closure = { [vehicle,] in print("Vehicle:", vehicle) } // 字符串插值 "This is a...\(vehicle,)" 混合开发 介绍 增加新的关键字@implementation,配合@objc可以为 Objective-C 导入的.h声明提供实现。...创建一个 Objective-C 类,此时会弹出一个提醒对话框(添加这个文件会创建一个 Objective-C 与 Swift 的混合项目,你是否希望 Xcode 自动配置一个桥接头文件来让 2 种语言的类文件相互可见...()与withThrowingTaskGroup()的闭包可以推断出子任务结果类型。

    42910

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

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

    1.2K50
    领券