Swift 教程 在线

2286Swift 构造过程

Swift 的初始化方法需要保证类型的所有属性都被初始化。所以初始化方法的调用顺序就很有讲究。在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法:

class Cat {
    var name: String
    init() {
        name = "cat"
    }
}

class Tiger: Cat {
    let power: Int
    override init() {
        power = 10
        super.init()
        name = "tiger"
    }
}

2285Swift 闭包

闭包 可以类似 OC 里的 block 一样当作是一个对象,所以在最后一节“闭包是引用类型”中的例子,得到的一个闭包常量,这个闭包常量在内存里作为一个实例对象,此对象存储了捕获到的参数,调用三次就得到三个不同的结果:

typedef int(^xFuncTest) (int);

-(xFuncTest)funcX {
    int __block inner = 0;
    xFuncTest blockTest = ^(int mark) {
        return inner += mark;
    };
    return blockTest;
}

xFuncTest func = [self funcX];
NSLog(@"%d",func(1));
NSLog(@"%d",func(1));
NSLog(@"%d",func(1));

2284Swift 字符串

字符串分割数组 -- 基于空格

let fullName = "First Last"
let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
// or simply:
// let fullNameArr = fullName.characters.split{" "}.map(String.init)

fullNameArr[0] // First
fullNameArr[1] // Last

2283Swift 基本语法

let 用于定义常量,定义完后不能修改。

var 用于定义变量,可以修改。

swift可以自动识别属性类别。