swift 关键词

关键词
  • mutating
    用于修饰协议中的方法,是因为考虑到在被struct,enum 实现该协议的方法时,能在该方法中修改 成员变量,而在类中不用特意声明,是因为在class 中 成员变量对于方法来说都是透明的
    以下代码中,
    如果协议方法 不作声明mutating,会报错 没有实现该方法
    如果 struct 和 enum中不声明 mutating,会报错,不能修改实例变量
protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}
// 定义类 实现该协议
class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class"
    var anotherProperty: Int = 110
    // 在 class 中实现带有mutating方法的接口时,不用mutating进行修饰。因为对于class来说,类的成员变量和方法都是透明的,所以不必使用 mutating 来进行修饰
    func adjust() {
        simpleDescription += " Now 100% adjusted"
    }
}
// 定义 struct 实现该协议
struct SimpleStruct: ExampleProtocol {
    var simpleDescription: String = "A simple structure"
    mutating func adjust() {
        simpleDescription += "(adjusted)"
    }
}
//在 enum 中 实现该协议
enum SimpleEnum: ExampleProtocol {
    case First, Second, Third
    var simpleDescription: String {
        get {
            switch self {
            case .First:
                return "first"
            case .Second:
                return "second"
            case .Third:
                return "third"
            }
        }

        set {
            simpleDescription = newValue
        }
    }
    
    mutating func adjust() {

    }
}

  • final
    swift4 新增
    可以修饰 class ,fun,var
    被修饰的对象 无法被继承
  • defer
    会在当前作用域结束时执行,执行顺序为逆序,defer 中捕获的变量值是可以改变的
  • deinit
    属于析构函数,析构函数和构造函数相反,当对象结束其声明周期时,系统自动执行析构函数(相当于OC的delloc)
  • associatedtype
    在协议中除了定位属性和方法外 ,还可以定义 类型占位符,让实现协议的类型 来指定类型
protocol Animal {
    associatedtype F: Food
    func eat(_ food: F)
}

struct Meat: Food { }
struct Grass: Food { }

struct Tiger: Animal {
    func eat(_ food: Meat) {
        print("eat \(food)")
    }
}

struct Sheep: Animal {
    func eat(_ food: Grass) {
        print("eat \(food)")
    }
}

  • subscript
    下标索引修饰,可以让class,enum,struct使用下标访问内部值
struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
//使用
 let times = TimesTable(multiplier: 3)
 let time = times[3]
  • typealias
    为类型声明一个别名,和typedef 类似
  • override
    如果我们要重写某个方法或者某个属性的话,需要在重写的变量前增加一个override关键字
  • fallthrough
    swift语言特性,switch语句的break 语句可以忽略不写,满足条件时直接跳出循环,fallthrough的作用就是执行完当前的case,继续执行下面的case,类似于其他语言中省去break 会继续往后一个break跑,直到碰到break 或者default 才完成的效果
 let type: Int = 3
        var name: String = ""
        switch type {
        case 1, 2, 3, 4, 5, 6:
            name += "\(type)"
            fallthrough
        case 8:
            name += "哈哈哈哈"
        case 9:
            name += "嗯~"
        default:
            name += "结束了"
        }
  • inout
    inout 作为函数声明时,引用传值的关键字。但是在调用的时候引用的是地址,所以在引用的时候要加上&
 func test(a: inout Int, b: inout Int)  {
        let num = a + b
        print(num)
    }
//使用
var a = 3
var b = 5
test(a: &a, b: &b)

  • @discardableResult
    正常的swift 方法 如果有返回值的话,在调用的时候 得有个变量去接收,如果不接收的话 会有警告,如果不想接收 又不想要警告,可以在方法声明的时候 在方法名上面 加上@discardableResult
image.png

改进:

class PHAssetController: PHBaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        getNumber()
    }

    @discardableResult
    func getNumber() -> Int {
        return 9;
    }
}
访问关键词
  • private
    只能在当前类被访问,swift4中,extension里也可以访问private的属性
  • filePrivate
    swift3 新增。
    对原来的private 进行细分
    所修饰的属性或者方法在当前的源文件中可以被访问
  • open
    swift3新增
    可以在任何地方被访问,继承和重写
    对原来的public进行细分
  • public
    可以在任何地方被访问,在其他模块中不能被继承和重写
  • internal
    默认关键字,可以在本模块内任意被访问
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容