Xcode15 新特性

1,195 阅读4分钟

前置说明

Xcode15有很多新的特性,这里我们只介绍一些需要我们动手操作的部分。像一些更加智能的提示,错误定位等在幕后帮助我们的暂不介绍

代码提示

  1. 可以 通过右箭头展开更多的提示选项,通过上下箭头进行选择使用哪个方法

image.png 2. 可以直接预览当前正在编写的注释文档

image.png

image.png 3. 现在能一眼识别哪些代码是运行在目标架构上

image.png

快捷操作

  1. 可以通过 Command+Shift+A 调取quick action,选择想要进行的动作。 但是如果你安装了企业微信,它会和企业微信的快捷键冲突。需要你解决一下

image.png

if 和 switch 语句可以被当做表达式

  1. 可以简化三元表达式的赋值
let a = 3
let b = if a == 3 { "a is 3" } else { "a is not 3" }
  1. 甚至可以结合函数,计算属性,闭包等的返回值,简化处理流程

image.png

func getSuitValue(suit: String) -> Int {  
    if suit == "♠︎" { 4 }  
    else if suit == "♥︎" { 3 }  
    else if suit == "♦︎" { 2 }  
    else { 1 }  
}

书签操作

  1. 可以通过选中代码段之后,右键添加到书签 也可以调用快捷操作后 选择添加到书签
  2. 不仅可以添加一段代码,也可以添加 搜索条件
  3. 可以编辑书签的名称,方便自己记忆
  4. 在每一个书签 左边 有一个completion action功能,用来标记是否完成。
  5. 甚至可以对书签进行分组处理,右键标签,New Group

image.png

image.png

refactor

对 符号 进行命名时,会同时选中文件、注释、字符串等等同名的进行命名

image.png

Asset Catalogs

Xcode现在能为asset catalog中的Color 和 Image 自动生成更加安全和好用的引用 Swift中会生成到 ColorResource 和 ImageResource的静态属性中。其中属性名是驼峰命名

image.png

image.png

image.png

OC中会自动生成一个 GeneratedAssetSymbols.h 文件,里面存放字符串常量 这个命名规律还没找着

image.png

image.png

参数包

  1. 参数包 允许我们写接收任意数量泛型参数的代码
  2. 使用each 关键字声明泛型,使用repeat 迭代传入的泛型类型的参数

image.png 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()  
        }
    }  
}

宏系统

  1. Swift的宏是操作语法树并生成新的语法树进行回写,分为两大类。每个大类有不同的角色可供选择使用
  2. Swift宏有编译器保证类型安全,无法修改或删除已有类型,只能添加新的代码

freestanding 独立宏,有两种角色

freestanding声明的宏,展开后在头部会有#,使用时也需要使用#。#assert image.png

  1. expression 表达式角色

    a. 说明下表达式和语句的区别。表达式会产生一个值,语句不会

    b. expression角色可以让你应用在任何产生一个值的地方

  2. declarating 声明角色

    a. 可以让你在任意一个地方声明中类型,类,struct,enum,protocol等

attached 附加宏 有五种角色

使用自定义的属性语法展开宏

image.png

  1. peer 可以在被附加位置的同级 添加代码
  2. memeber 应用于成员,成员包括属性,方法等
  3. memberAttributes 和 @objcMember差不多,给类型的每个属性添加attribute
  4. conformance 添加一组遵循的协议
  5. accessor 主要给属性添加 get set willSet didSet等

预览宏 功能

  1. 可以通过预览宏 #Preview 预览UIView和UIViewController啦,它还支持很多类型

image.png 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 了

image.png

资料

developer.apple.com/documentati…

sarunw.com/posts/littl…

sarunw.com/posts/bookm…

sarunw.com/posts/swift…

sarunw.com/posts/xcode…

www.swiftwithvincent.com/newsletter/…

medium.com/%E5%BD%BC%E…

medium.com/%E5%BD%BC%E…

xiaozhuanlan.com/topic/47312…

mp.weixin.qq.com/s/clJYjhTsN…