对于经常不习惯在网上发表文章的孩子,我觉得要开始改变一下自己,给自己养成一个好的习惯,也是给自己过去一段时间学习的总结,温故而知新,觉得还是很有必要的!
好了,闲话不多说,说多了我怕刹不住车,变成不是技术总结了,可能变成心里路程了,O(∩_∩)O哈哈~
对于从事iOS开发的工作者,我想迟早都要奔着Swift去的,对于Swift也学习了挺久一段时间,也投入到了项目中使用,说说我的初步感受,这个语言用习惯了写起来是真的顺手,看着也是舒服,不过就是Xcode可能是不太适应这个新孩子,会挺容易崩溃的,联想也不是太顺畅。
1.对于Swift就不得不说到 Swift的可选类型(Optional Type)
什么是optional?
在Swift中声明的一个变量时, 默认情况下它是non-optional(非可选), 即必须给这个变量赋一个非空的值. 如果给non-optional(非可选)类型的变量赋值nil, 编译器就会报错。
Swift中, 当声明一个类的属性时, 属性默认也是non-optional的
var string1: String = "hello" // OK
string1 = nil // 这样就会报错
声明成可选类型
class MyClass { var name: String? // }
2.Swift中的各种控制语句
- Continue
continue语句告诉一个循环体立刻停止本次循环,重新开始下次循环。就好像在说“本次循环我已经执行完了”,但是并不会离开整个循环体。 - Break
break语句会立刻结束整个控制流的执行。当你想要更早的结束一个switch代码块或者一个循环体时,你都可以使用break语句。
控制流
- Swift提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不同代码分支的if、guard和switch语句,还提供了for-in循环
带标签的语句
在 Swift 中,你可以在循环体和条件语句中嵌套循环体和条件语句来创造复杂的控制流结构。并且,循环体和条件语句都可以使用break语句来提前结束整个代码块。因此,显式地指明break语句想要终止的是哪个循环体或者条件语句,会很有用。类似地,如果你有许多嵌套的循环体,显式指明continue语句想要影响哪一个循环体也会非常有用。
为了实现这个目的,你可以使用标签(statement label)来标记一个循环体或者条件语句,对于一个条件语句,你可以使用break加标签的方式,来结束这个被标记的语句。对于一个循环语句,你可以使用break或者continue加标签,来结束或者继续这条被标记语句的执行。
声明一个带标签的语句是通过在该语句的关键词的同一行前面放置一个标签,作为这个语句的前导关键字(introducor keyword),并且该标签后面跟随一个冒号。下面是一个针对while循环体的标签语法,同样的规则适用于所有的循环体和条件语句。
label name: while condition { statements }
- 提前退出guard
像if语句一样,guard的执行取决于一个表达式的布尔值。我们可以使用guard语句来要求条件必须为真时,以执行guard语句后的代码。不同于if语句,一个guard语句总是有一个else从句,如果条件不为真则执行else从句中的代码。如果guard语句的条件被满足,则继续执行guard语句大括号后的代码。将变量或者常量的可选绑定作为guard语句的条件,都可以保护guard语句后面的代码
还有一点值得注意的地方是结构体和枚举是值类型
值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。
实际上,在 Swift 中,所有的基本类型:整数(Integer)、浮点数(floating-point)、布尔值(Boolean)、字符串(string)、数组(array)和字典(dictionary),都是值类型,并且在底层都是以结构体的形式所实现。
在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。即形成一个新的对象
- 类是引用类型
与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的是已存在的实例本身而不是其拷贝。
-
方法的抛出异常的处理
-
关于构造函数的
-
关于事件监听
-
事件的监听机制: 将方法包装成@sel放在类的方法列表中 然后在类的方法列表中找
根据@sel找到imp指针(函数指针) 最后执行函数
强大的 guard else 提前退出 和 if let 可选绑定 可以多变的解决很多逻辑问题
func guardLet() {
let bcG: String? = "gurad"
let bcA: String? = "let"
// guard else 的多种逻辑用法
guard bcG == bcA else {
return
}
print("相等")
guard let g = bcG, let a = bcA else {
return
}
print(a + g)
guard var vg = bcG, var va = bcA else {
return
}
vg = "vg"
va = "va"
print(vg + va)
// 可选绑定的条件逻辑
if let bg = bcG, bg.isEmpty {
print(bg)
}
if var bg = bcG ,var ba = bcA {
bg = "bg"
ba = "ba"
print(bg + ba)
}
if let bg = bcG ,let ba = bcA {
print(bg + ba)
}
}
第一次就简单介绍到这里!没什么干货,就是来认认门,先混个熟脸,后续再跟新别的~