1.有条件的 for 循环
for view in self.view.subviews where view is UIButton {
print(view)
}
for case let view as UIButton in self.view.subviews {
print(view)
}
2.forEach方法
当循环体内的逻辑比较简单时,forEach 往往比 for...in...来的更加简洁:
modelArray.forEach { model in
print(model)
}
3.循环获取模型和索引值
for (index, model) in modelArray.enumerated() {
print(index)
print(model)
}
for index in 0..<modelArray.count {
let model = modelArray[index]
print(model)
}
4.高级函数first(where: )
过滤集合中的元素时非常的好用,不过在某些情况下,比如获取集合中满足条件的第一个元素时,有一个更好的选择first(where: )
if let model = modelArray.first(where: {$0.questionNum == 0}) {
print(model)
}
5.高级函数contains(where: )
if modelArray.contains(where: {$0.questionNum == 0 }) {
print("数组里面包含questionNum为0的模型")
}
6.协议与继承
1.尽量使用协议而不是继承。协议可以让代码更加灵活,因为类可同时遵守多个协议。
2.结构和枚举不能子类化,但是它们可以遵守协议,这就更加放大了协议的好处。
7. Struct 和 Class
1.尽可能使用 Struct 而不是 Class。Struct 在多线程环境中更安全,更快。
2.它们最主要的区别, Struct 是值类型,而 Classe 是引用类型,这意味着 Struct 的每个实例都有它自己的唯一副本,而 Class 的每个实例都有对数据的单个副本的引用。
官方文档
8. 批量重命名
1.选中变量,右键Refactor -> Rename。(适合全局替换的场景)
2.Show code Actions -> Edit All in Scope 适合重命名的对象只在当前文件中被使用。这种情况下,Xcode 只会搜索当前文件内需要重命名的地方,然后高亮显示。修改好后,回车即可重命名成功
9.自动创建按成员变量顺序的初始化器
右键需要 init 的类型,选择 Refactor,然后再选择 Generate Memberwise Initializer。
10.自动填充 switch的所有case
1.对于 OC 来说,在写好 switch 语法后,右键 switch,既可选择 Add Missing Switch Cases 即可自动填充所有 case。
2.对于 Swift 来说,不用写 switch 语法,只需要输入 switch 枚举变量名,回车即可自动填充所有 case。
11.知道函数或变量被调用的所有位置
有时需要知道函数或变量被调用的所有位置。那么就可以右键方法名称,找到Find Call Hierarchy,在 Xcode 左侧就会出现该方法的调用层级。
12.将代码提取到方法或变量
1.我们可以选中部分代码,然后通过右键点击弹出菜单,选择 Refactor -> Extract to Method 将它们提取成一个独立的方法。提取出来后,给方法命个名就行
2.如果想提取单个表达式,则可以选择 Refactor -> Extract to Variable 。
13.将警告当成错误来显示
1.对于 Swift 项目,还可以在 Swift Compiler - Warning Policies 中设置
image.png
2.对于 OC 项目,还可以在 Apple LLVM - Warning Policies 中设置
image.png
14.自定义模板
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates
网友评论