Swift基础知识

一、self和Self

1、self出现在对象方法中,self就代表对象。self出现在类方法中,就代表类。
2、Self代表当前的类型,Self一般用作返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)。

  • self调用类中的属性。
class Person {
            var age = 1
            static var count = 2
            func run() {
            print(self.age) // 1
            print(Self.count) // 2
        }
}
  • 创建协议方法,返回Self,再创建两个类Person、Student,调用协议方法,返回的是当前的类型Person、Student。如下:
protocol Runnable {
   func test() -> Self
}

        class Person : Runnable {
            required init() {}
            func test() -> Self { 
              type(of: self).init() 
            }
         }
        //Student继承Person,同时也继承了代理,可以直接调用方法。
        class Student : Person {}
        var p = Person() 
        print(p.test())    // Person 
        var stu = Student() 
        print(stu.test())  // Student 
}

二、Any&AnyObject

Swift提供了两种特殊类型:

  • Any代表任意类型(类、枚举、结构体,也包括函数类型)
  • AnyObject代表任意类型(在协议后面写上AnyObject,只能代表只有类能遵守这个协议)
    在协议后面写上class,也表示只有类能遵守这个协议
        var stu : Any = 10
        var stuArr = [Any]()
        var dicMessage = [String:Any]()

        stu = "zhangkai"        
        dicMessage = ["name":"zhangkai","age":28,"sex": "man"]
        stuArr.append(1)
        stuArr.append(3.14)
        stuArr.append("Jack Ma")
        stuArr.append({ 10 })
        stuArr.append(dicMessage)
        let dic = stuArr[3]

        print("~~~~~~~~~~~strArr:",stuArr,dic)

三、X.self、X.Type、AnyClass

  • X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息。
  • X.self是X.Type类型。

四、CaseIterable

让枚举遵守CaseIterable协议,可以实现遍历枚举值。

enum Seasons : CaseIterable {
    case Spring,Summer,Autumn,Winter
}

       let seasons = Seasons.allCases
        print(seasons)
        for season in seasons {
            print("~~~~~~~~~season:",season)
      }

结果:

[TestAbc.Seasons.Spring, TestAbc.Seasons.Summer, TestAbc.Seasons.Autumn, TestAbc.Seasons.Winter]
~~~~~~~~~season: Spring
~~~~~~~~~season: Summer
~~~~~~~~~season: Autumn
~~~~~~~~~season: Winter

五、mutating

只有将协议中的实例方法标记为mutating

  • 才允许结构体、枚举的具体实现修改自身内存。
  • 类在实现方法时不用加mutating,枚举、结构体才需要加mutating
protocol Drawable {
    mutating func draw()
}
class size: Drawable {
    var width:Int = 3
    func draw() {
        width = 10
    }
}

struct Point : Drawable {
    var width:Int = 3
    mutating func draw() {
       width = 10
    }  
}

如果struct中不写mutating,那么会提示Cannot assign to property: 'self' is immutable

  • 注释:
    immutable:不可变的 mutable:可变的

六、init

  • 协议中还可以定义初始化器。
    在非final类实现时必须加上required。
protocol Drawable {
    init(x:Int,y:Int)
}

class Point : Drawable {
    required init(x: Int, y: Int) {}
}

final class Size : Drawable{
    init(x: Int, y: Int) {}
}
  • 如果从协议实现了初始化器,刚好是实现了父类指定的初始化器。
    那么这个初始化器必须同时添加required、override。
protocol Liveable {
    init(age : Int)
}

class Person {
    init(age : Int) {}
}

class Student: Person,Liveable {
    required override  init(age: Int) {
        super.init(age: age)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,739评论 2 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,723评论 0 10
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,092评论 1 32
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,783评论 1 10
  • 文/鱼音 原来你也可以 猛然明白 你来人世间走一趟 遇见谁 遇到事 都是生命的意义 珍惜未来每天 余生请对自己好一...
    鱼音er阅读 265评论 0 0