精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究
[]:和数组与键值对有关系,
值缺失?
用()实时定义元组比较方便
函数可以嵌套,也就是内部函数支持
函数指针形式用->指示
闭包可以当调用语句,也可以当定义语句吗?numbers.map()
用$访问闭包带的参数,按位置。
init是构造函数名
deinit析构
willset和didset事件引入
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another tes
t shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
这三行不理解
参数第二名称:
func incrementBy(amount: Int, numberOfTimes times: Int)
times是第二名
带?的表达式是可选表达式,它的值可能是有效的,也有可能是nil为空。
枚举可以包含方法,枚举的每个项类型可以不一样,可以是元组
使用 toRaw 和 fromRaw 函数来在原始值和枚举值之间进行转换
if let validCount = count {//如果count有值的话,把count的值赋给validCount,且条件为true;如果count为nil,则执行else
类、枚举和结构体都可以实现接口
mutating 关键字用来标记一个会修改结构体的方法
使用 extension 来为现有的类型添加功能
泛型用where可以限制
包括 Unicode 字符的命名,更灵活
注释可嵌套,支持
/*
/* */
*/
部分元组值,用忽略符号_
闭区间运算符...
特殊字符用\u扩展
格式化位置可以带函数,\()
字符串的内存长度和字符个数不一样
hasPrefix/hasSuffix
注意…的使用,对范围处理很灵活
Enumerate遍历键值对
除此之外,如果代码上下文中提供了类型信息, 例如一个函数参数或者一个已经定义好类型的常量或者变量,我们可以使用空数组语句创建一个空数组,它的写法很简单: [](一对空方括号)
空数组不用new
字典结合元组使用比较方便
Switch的case不用带break;
如果你不需要知道范围内每一项的值,你可以使用下划线(_)替代变量名来忽略对值的访问
for语句不需要带括号()
case 块的模式允许将匹配的值绑定到一个临时的常量或变量,这些常量或变量在该 case 块里就可以被引用了——这种行为被称为值绑定,case行里带上let,还可以带where
循环或代码块可以加标签label,break后可以带这些标签名
外部形参名
有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。
如果你希望使用你函数的人在调用函数时提供形参名称,那除了本地形参名外,你还要为每个形参定义一个外部形参名称。你写一个外部形参名称在它所支持的本地形参名称之前,
之间用一个空格来分隔:
1. func someFunction(externalParameterName localParameterName: Int) {
这和C++不一样
不需要两次书写,加#
根据上下文推断类型
因为排序闭包是作为函数的参数进行传入的, Swift 可以推断其参数和返回值的类型。
reversed = sort(names, { s1, s2 in return s1 > s2 } )
初见这样形式代码就不好理解了,
reversed = sort(names, { $0 > $1 } )
数组(array)和字典(dictionaries),都是值类型
通过在数组变量上调用 unshare 方法来确定数组引用的唯一性
对于值类型(指结构体和枚举)可以定义存储型和计算型类型属性,对于类(class)则只能定义计算型类型属性
相反,如果你不想为方法的第二个及后续的参数提供一个外部名称,可以通过使用下划线(_)作为该参数的显式外部名称,这样做将覆盖默认行为
外部参数名在前,本地参数名在后
但是,如果你确实需要在某个具体的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的 self 属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例
声明类的类型方法,在方法的 func 关键字之前加上关键字 class;声明结构
体和枚举的类型方法,在方法的 func 关键字之前加上关键字 static
通常附属脚本是用来访问集合(collection),列表(list)或序列(sequence)中元素的快捷方式。你可以在你自己特定的类或结构体中自由的实现附属脚本来提供合适的功能。
你可以将一个继承来的只读属性重写为一个读写属性,只需要你在重写版本的属性里提供getter 和 setter 即可。但是,你不可以将一个继承来的读写属性重写为一个只读属性,意思是:只能加,不能减少。
注意:如果你不希望为构造器的某个参数提供外部名字,你可以使用下划线_来显示描述它的外部名,以此覆盖上面所说的默认行为
约束更严格的参数名,在重载调用时更方便
构造函数里可以修改常量成员
注意:假如你想通过默认构造器、逐一对象构造器以及你自己定制的构造器为值类型创建实例,我们建议你将自己定制的构造器写到扩展(extension)中,而不是跟值类型定义混在一起。想查看更多内容,请查看扩展章节
指定构造器必须总是向上代理
便利构造器必须总是横向代理
注意闭包结尾的大括号后面接了一对空的小括号。这是用来告诉 Swift 需要立刻执行此闭包。如果你忽略了这对括号,相当于是将闭包本身作为值赋值给了属性,而不是将闭包的返回值赋值给属性。