Swift 6.1 新特性

Swift 6.1 内置于 Xcode 16.3,这是 Swift 6 之后的首个小版本更新,新特性很少。

尾随逗号

元组、函数的参数、闭包捕获列表以及字符串插值等都可以像数组一样,在最后一个元素的后面添加,,以便轻松地追加、删除、重新排列或者注释最后一个元素。

swift 复制代码
// 元组
(404, "Not Found",)
// 函数的参数
func sum(num1: Int, num2: Int,) -> Int {
    num1 + num2
}
var vehicle = "Car"
// 闭包捕获列表
let closure = { [vehicle,] in
    print("Vehicle:", vehicle)
}
// 字符串插值
"This is a \(vehicle,)"

混合开发

介绍

  • 增加新的关键字@implementation,配合@objc可以为 Objective-C 导入的.h声明提供实现。
  • 实现方式:在 Swift 中扩展 Objective-C 类,然后通过@objc @implementation实现属性与方法以替换 Objective-C 的@implementation。

实现

  1. 新建一个基于 Swift 语言的 iOS 项目。
  2. 创建一个 Objective-C 类,此时会弹出一个提醒对话框(添加这个文件会创建一个 Objective-C 与 Swift 的混合项目,你是否希望 Xcode 自动配置一个桥接头文件来让 2 种语言的类文件相互可见?),点击Create Bridging Header。
  3. 项目中多出 3 个文件,分别为创建的 Objective-C 类文件(.h与.m)与 Bridging Header 文件,修改 Objective-C 类文件如下。
objc 复制代码
// .h文件
@interface Person: NSObject

@property(nonatomic, copy) NSString *name; 
-(void)eat;

@end


// .m文件
// @implementation Person
// @end
  1. 在 Bridging Header 文件中通过#import "类名.h"导入所有需要使用的 Objective-C 类的头文件。
  2. 在 Swift 中实现并且调用 Objective-C。
swift 复制代码
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 调用
        let person = Person()
        person.name = "zhangsan"
        person.eat() // zhangsan吃饭了
    }
}

// MARK: - @objc @implementation extension Objective-C类
@objc @implementation extension Person {
    // 实现属性
    var name: String?

    // 实现方法
    func eat() {
        print("\(name ?? "")吃饭了")
    }
}

注意 :一旦在 Swift 进行了实现,Objective-C 中的@implementation不需要再实现,否则会报2 duplicate symbols的编译错误。

并发编程

  • actor 允许在属性与函数上使用nonisolated,表示该 API 可以在任何并发上下文中安全调用。Swift 6.1 将nonisolated支持到了类型与扩展,这样其内的所有属性与方法不需要再单独添加nonisolated。
swift 复制代码
// 结构体
nonisolated struct Station {
}

class Train {
}
// 扩展
nonisolated extension Train {
}
  • withTaskGroup()与withThrowingTaskGroup()的闭包可以推断出子任务结果类型。
swift 复制代码
// Swift6.1之前
await withTaskGroup(of: Int.self) { group in
    ...
}
await withThrowingTaskGroup(of: String.self) { group in
    ...
}
// Swift6.1之后
await withTaskGroup { group in
    ...
}
await withThrowingTaskGroup { group in
    ...
}
相关推荐
叫Guava不是瓜娃15 小时前
我用 Swift 写了个本地语音输入:按住说话,松开就是整理好的文字(开源)
swift
Yannik2 天前
iOS Swift Package Manager(SPM)私有组件完整实操
ios·swift
我就是不信2 天前
Swift 方法派发机制详解
开发语言·ios·swift
用户38034165882974 天前
八个私有 SPM 包撑起六款 App:分支当版本、钻石依赖,和一次谁都没报错的失效
ios·swift
健了个平_244 天前
【iOS】关于传统竖屏 UIKit 项目如何简单适配 iPhone Duo 的第一版
ios·app·swift
2501_915106325 天前
iOS开发之Xcode常用调试技巧总结
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
sakiko_5 天前
使用SPM(Xcode27), 并解决Package.swift不存在问题
swift
Coder_张三7 天前
iOS 26 适配
前端·ios·swift
用户38034165882977 天前
崩溃率从 0.3% 到 0.04%:我们做对的不是修 bug,是让每个崩溃只发生一次
ios·swift
东坡肘子7 天前
当 Build in Public 重新转入地下 -- 肘子的 Swift 周报 #157
人工智能·swiftui·swift