前置说明
Xcode15有很多新的特性,这里我们只介绍一些需要我们动手操作的部分。像一些更加智能的提示,错误定位等在幕后帮助我们的暂不介绍
代码提示
- 可以 通过右箭头展开更多的提示选项,通过上下箭头进行选择使用哪个方法
2. 可以直接预览当前正在编写的注释文档
3. 现在能一眼识别哪些代码是运行在目标架构上
快捷操作
- 可以通过 Command+Shift+A 调取quick action,选择想要进行的动作。 但是如果你安装了企业微信,它会和企业微信的快捷键冲突。需要你解决一下
if 和 switch 语句可以被当做表达式
- 可以简化三元表达式的赋值
let a = 3
let b = if a == 3 { "a is 3" } else { "a is not 3" }
- 甚至可以结合函数,计算属性,闭包等的返回值,简化处理流程
func getSuitValue(suit: String) -> Int {
if suit == "♠︎" { 4 }
else if suit == "♥︎" { 3 }
else if suit == "♦︎" { 2 }
else { 1 }
}
书签操作
- 可以通过选中代码段之后,右键添加到书签 也可以调用快捷操作后 选择添加到书签
- 不仅可以添加一段代码,也可以添加 搜索条件
- 可以编辑书签的名称,方便自己记忆
- 在每一个书签 左边 有一个completion action功能,用来标记是否完成。
- 甚至可以对书签进行分组处理,右键标签,New Group
refactor
对 符号 进行命名时,会同时选中文件、注释、字符串等等同名的进行命名
Asset Catalogs
Xcode现在能为asset catalog中的Color 和 Image 自动生成更加安全和好用的引用 Swift中会生成到 ColorResource 和 ImageResource的静态属性中。其中属性名是驼峰命名
OC中会自动生成一个 GeneratedAssetSymbols.h 文件,里面存放字符串常量 这个命名规律还没找着
参数包
- 参数包 允许我们写接收任意数量泛型参数的代码
- 使用each 关键字声明泛型,使用repeat 迭代传入的泛型类型的参数
3. Swift5.9之前SwiftUI单个View的子View有10个的限制,有了参数包之后就可以突破这个限制了
struct ContentView: View {
var body: some View {
VStack(alignment: .leading, spacing: 10) {
Text("履痕")
.font(.largeTitle)
.foregroundStyle(.mint.gradient)
Text("有一天 我會老 日記相本憶年少")
Text("看海吹風的日子 少年心志知多少")
Text("親愛老友可知道 我們誓言不會老")
Text("多情蹁蹮的楓紅 是我夢裡的依靠")
Text("你是否曾想過 人生在世的意義")
Text("掌聲喝采都會空 何必看重")
Text("熱鬧之後的冷清 你是否感受過")
Text("唯有真情是永遠")
Text("人生無奈何期多 看似擁有卻失落")
Text("努力踏實的生活 是我對你的承諾")
Text("相聚日子已不多 笑淚悲歡已成夢")
Text("含淚與君道珍重 期待他日再相逢")
}
.fontWeight(.black)
.foregroundStyle(.cyan.gradient)
.padding()
.background {
Image(.paper)
.resizable()
.scaledToFill()
}
}
}
宏系统
- Swift的宏是操作语法树并生成新的语法树进行回写,分为两大类。每个大类有不同的角色可供选择使用
- Swift宏有编译器保证类型安全,无法修改或删除已有类型,只能添加新的代码
freestanding 独立宏,有两种角色
freestanding声明的宏,展开后在头部会有#,使用时也需要使用#。#assert
-
expression 表达式角色
a. 说明下表达式和语句的区别。表达式会产生一个值,语句不会
b. expression角色可以让你应用在任何产生一个值的地方
-
declarating 声明角色
a. 可以让你在任意一个地方声明中类型,类,struct,enum,protocol等
attached 附加宏 有五种角色
使用自定义的属性语法展开宏
- peer 可以在被附加位置的同级 添加代码
- memeber 应用于成员,成员包括属性,方法等
- memberAttributes 和 @objcMember差不多,给类型的每个属性添加attribute
- conformance 添加一组遵循的协议
- accessor 主要给属性添加 get set willSet didSet等
预览宏 功能
- 可以通过预览宏 #Preview 预览UIView和UIViewController啦,它还支持很多类型
2. 对于SwiftUI组件只需要放进去就行。UIKit和AppKit需要将view 返回即可
#Preview {
Button("SwiftUI") {}
}
#Preview {
let button = UIButton(type: .system)
button.setTitle("UIKit", for: .normal)
return button
}
#Preview {
let button = NSButton(title: "AppKit", target: nil, action: nil)
return button
}
Swift Package
现在可以通过 File > New > Package… 创建各种类型的Package 再也不用通过 swift package init --type 了
资料
developer.apple.com/documentati…