首页 > 编程语言 > 详细

Swift语法笔记

时间:2015-12-29 12:50:28      阅读:159      评论:0      收藏:0      [点我收藏+]

Guard

guard是一种条件判断语句,可以类比if、assert。如果条件不符合,guard的else语句就运行,从而退出这个函数。

具体写法如下:

func fooGuard(x: Int?) {
    guard let x = x where x > 0 else {
        // 变量不符合条件判断时,执行下面代码
        return
    }

    // 使用x
    x.description
}

 


Subscripts

Subscripts用于给类(class)自定义下标,下标使用subscript关键字,然后跟一个圆括号,里面是该下标的参数和参数类型(在实际使用中该参数就相当于数组的index和字典的key一样),最后有该下标的返回值类型。

具体写法如下:

subscript(row: Int, col: Int) -> T {
        get {
            assert(row >= 0 && row < tileNumber)
            assert(col >= 0 && col < tileNumber)
            return boardArray[row*tileNumber + col]
        }
        set {
            assert(row >= 0 && row < tileNumber)
            assert(col >= 0 && col < tileNumber)
            boardArray[row*tileNumber + col] = newValue
        }
    }

如果你想定义一个只读的下标,那么可以不实现setter方法,并且可以省略getter方法的get关键字,编译器会判断出这是一个只读的下标。

 


 

Unowned

unowned和weak一样,可以用在防止循环引用的地方。区别在于:unowned 设置以后即使它原来引用的内容已经被释放了,它仍然会保持对被已经释放了的对象的一个 "无效的" 引用,它不能是 Optional 值,也不会被指向 nil。如果你尝试调用这个引用的方法或者访问成员属性的话,程序就会崩溃。而 weak 则友好一些,在引用的内容被释放后,标记为 weak 的成员将会自动地变成 nil (因此被标记为 @weak 的变量一定需要是 Optional 值)。关于两者使用的选择,Apple 给我们的建议是如果能够确定在访问时不会已被释放的话,尽量使用 unowned,如果存在被释放的可能,那就选择用 weak

例如:

lazy var printName: ()->() = {
    [weak self] in
    if let strongSelf = self {
        print("The name is \(strongSelf.name)")
    }
}

如果我们可以确定在整个过程中 self 不会被释放的话,我们可以将上面的 weak 改为 unowned,这样就不再需要 strongSelf 的判断。

lazy var printName: ()->() = {
    [unowned self] in
    print("The name is \(self)")
}

详细教程见:http://swifter.tips/retain-cycle/

 


Mutating

在swift含三种类型(type):  structure ,  enumeration ,  class。

其中structure和enumeration是值类型( value type ),class是引用类型( reference type ),与objective-c不同的是,structure和enumeration也可以拥有方法。

虽然结构体和枚举可以定义自己的方法,但是默认情况下,实例方法中是不可以修改值类型的属性。为了能够在实例方法中修改属性值,可以在方法定义前添加关键字mutating。

具体写法如下:

struct Point {
  var x = 0, y = 0
  
  mutating func moveXBy(x:Int,yBy y:Int) {
    self.x += x
    self.y += y
  }
}

 


 

Swift语法笔记

原文:http://www.cnblogs.com/liuliuliu/p/5085238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!