swift筆記:函數(shù)補(bǔ)充,枚舉補(bǔ)充,屬性補(bǔ)充,繼承補(bǔ)充

關(guān)鍵字inout

這個例子是在playground下寫的

// 聲明2個變量
var x = 3

var y = 5
// 聲明一個函數(shù),函數(shù)的形參接收2個inout關(guān)鍵字標(biāo)識的變量,可以理解是2個地址
func demo(inout X x:Int ,inout Y y:Int){
    // 打印改變前的值,3,5
    print(x,y)
    // 賦值
    x = y
    // 打印改變后的值,5,5
    print(x,y)
}
// 調(diào)用方法 傳入2個結(jié)構(gòu)體變量的地址
demo(X: &x, Y: &y)
// 打印在函數(shù)外邊的2個結(jié)構(gòu)體變量 5 5
print(x,y)

inout這個形參接收的相當(dāng)于接收的是結(jié)構(gòu)體變量的地址,所以根據(jù)地址在函數(shù)內(nèi)部改變的值,在外部也會發(fā)生變化

函數(shù)的類型

舉例:

func demo3(){
    print("呵呵");
}
let d = demo3

上面這個類型函數(shù)的類型就是() -> ()

func demo1( let name name : String ,let age:Int){

    print("\(name)\(age)")
}

上面這個類型函數(shù)的類型就是(String, Int) -> ()


函數(shù)的形參類型是函數(shù)類型,例:

func demo4(let test:()->()){

    test()
}

形參test的類型為() -> ()的函數(shù)類型,能夠接收一個 形參返回值都為空得函數(shù)


函數(shù)的返回值類型是函數(shù)類型,例:

// 定義一個函數(shù)  這個函數(shù)的返回值是一個以String類型為形參,無返回值的函數(shù).
func demo5()->((String)->()){
    // 定義一個 形參String無返回值的函數(shù)
    func test(let str :String){
        
        print(str);
    }

    return test
}
// 定義一個函數(shù)變量來接收函數(shù),是一個接收字符串形參無返回值的函數(shù)
var t = demo5()
調(diào)用
t("IOS")

返回值是一個String -> ()類型的函數(shù)

枚舉:rawValue

可以獲取枚舉的原始值用法,枚舉類型.枚舉值.rawValue

枚舉:init(rawValue:)

可以根據(jù)原始值用來找到對應(yīng)的枚舉如:枚舉類型(rawValue:3)

延遲加載 :lazy

例子:

class Dog: Animal {
    
    var name:String?
    
    var age:Int!
    let color:String = "棕色"
    
    lazy var id:Int = Int()
   
    convenience init(name:String, age:Int){
        self.init()
        self.name = name;
        self.age = age;
    }
    
    override func run() {
        super.run()
        print("狗跑")
    }
    
   }

lazy var id:Int = Int() , lazy所標(biāo)記的屬性只有在第一次調(diào)用的時候才會計(jì)算初始值


計(jì)算屬性

可以通過變量的其他屬性經(jīng)過計(jì)算獲取到值,而本身當(dāng)賦值的時候也不會儲存而是拆開賦值給其他屬性


struct Square {
    var size :CGSize {
        // get 是簡潔 getter  方法,可以.語法訪問.
        get{
            return CGSize(width: self.long, height: self.wide)
        }
        // set 是簡潔 setter 方法,如果括號中不定義參數(shù)名的話可以使用newValue這個參數(shù)來獲取值.
        set(newSize){
            self.long = newSize.width
            self.wide = newSize.height
        }
    }
    var long:CGFloat = 0;
    var wide:CGFloat = 0;
}
屬性監(jiān)視器

屬性監(jiān)視器willSetdidSet可以通過新舊值的變化來進(jìn)行一些判斷,和需求實(shí)現(xiàn).
實(shí)例:

struct Square {
    var size :CGSize {
        // get 是簡潔 getter  方法,可以.語法訪問.
        get{
        
            return CGSize(width: self.long, height: self.wide)
        }
        // set 是簡潔 setter 方法,如果括號中不定義參數(shù)名的話可以使用newValue這個參數(shù)來獲取值.
        set(newSize){
        
            self.long = newSize.width
            self.wide = newSize.height
        }
    }
    var long:CGFloat = 0{
        // 在willset 也可以willset( ) 指定新值的變量名
        willSet{
            if(newValue < self.long){
                print("減少了\(newValue - self.long )")
            }
        }
        // 在didSet 也可以didSet( ) 指定舊值的變量名
        didSet{
        
            if(oldValue < self.long){
                print("增加了\(self.long - oldValue)")
            }
        }
    }
    var wide:CGFloat = 0;
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var sq = Square();
        
        sq.long = 30;
        sq.wide = 20 ;
        
        print(sq.size)
        
          }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

打印的結(jié)果

增加了30.0
(30.0, 20.0)

注意的是:屬性監(jiān)視器只有在屬性變化時才會調(diào)用不會去判斷這個值是否相等.初始化的時候不會調(diào)用.


靜態(tài)量,與類屬性 static 與 class

static 靜態(tài)變量 靜態(tài)常量聲明的關(guān)鍵字,可以寫在類中,也可以寫在結(jié)構(gòu)體中,作用域?yàn)楫?dāng)前類,可以直接通過結(jié)構(gòu)體名稱+.語法使用,也可以用類名+.語法使用,亦或者通過類屬性調(diào)用.
class類屬性關(guān)鍵字,格式: class var demo:Int{ ... }在括弧中,可以使用在相同文件下的結(jié)構(gòu)體名稱調(diào)用靜態(tài)屬性來使用.

例子:

// 結(jié)構(gòu)體中有一個靜態(tài)變量
struct Type {
    static  var type:Int = 0;
}

class Test: NSObject {
    // 類屬性 指定set get,調(diào)用結(jié)構(gòu)體中的靜態(tài)值
    class var t:Int {
        set{
            Type.type = newValue;
        }
        get{
            return Type.type;
        }
    }
}

使用代碼

Type.type = 3;
print(Type.type)
Test.t = 5;
print(Type.type);
print(Test.t) 

輸出結(jié)果:3 5 5


函數(shù)的外部參數(shù)名與內(nèi)部參數(shù)名
func demo( name : String,age:Int ){
  
}

以上這段代碼,name是一個內(nèi)部參數(shù)名,而age即是內(nèi)部參數(shù)名也是外部參數(shù)名,在函數(shù)中第一個形參的外部名稱是省略的當(dāng)然,我們可以加上一個外部參數(shù)名,并且改寫第二個參數(shù)的內(nèi)部參數(shù)名如下:

func demo( name s1 : String,age s2 :Int ){
  
}

類方法,靜態(tài)方法

與OC一樣,swift也提供了類方法的實(shí)現(xiàn),并且在結(jié)構(gòu)體和枚舉上也實(shí)現(xiàn)了靜態(tài)方法(類型方法)的調(diào)用.
類方法聲明在func前寫上class,而類型方法前面寫上static.


腳本屬性:subscript

附屬腳本允許你通過在實(shí)例后?面的?方括號中傳?入?一個或者多個的索引值來對實(shí)例進(jìn)?行訪問和賦值

subscript(x:CGFloat)->CGFloat{
    
        return x * self.long;
    }
防止重寫的關(guān)鍵字final

在對象方法,類方法,屬性,以及腳本屬性前面如果加上了final他得子類就不可以重寫父類的方法,屬性.

弱引用的關(guān)鍵字weak

在屬性前面如果加上了weak這個屬性所指向的堆內(nèi)存就是一個弱引用

弱引用的關(guān)鍵字unowned

在屬性前面如果加上了unowned這個屬性所指向的堆內(nèi)存就是一個無主引?,無主引用是非可選類型,不可以賦值為nil,而如果無主引用所指向的堆內(nèi)存已經(jīng)被釋放了,還去訪問和調(diào)用,則程序會崩潰.

也可以用關(guān)鍵字unowned在構(gòu)建定義占有列表 [unowned self] in

自動構(gòu)造器的繼承

有2種方法自動繼承全部的父類構(gòu)造器:1,子類中沒有一個構(gòu)造器將自動繼承父類所有的構(gòu)造器. 2,子類重載了父類的所有構(gòu)造器(都重載了,當(dāng)然繼承了,并且可以在添加新的)

析構(gòu)函數(shù)

一個對象從內(nèi)存中釋放之前所執(zhí)行的函數(shù),注意的是沒有()

deinit {
    print("被釋放了")
}
類型嵌套

swift 支持 內(nèi)部類,內(nèi)部枚舉,結(jié)構(gòu)體等...

 class Dog: NSObject {
    
    // 內(nèi)部類 名字
    class Name: NSObject {
        //內(nèi)部類屬性
        var surname:NSString!
        
        var name:NSString!
        
    }
    var name : Name = Name();
    
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惑畴,一起剝皮案震驚了整個濱河市舷嗡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖尚胞,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距贷,死亡現(xiàn)場離奇詭異株憾,居然都是意外死亡饿敲,警方通過查閱死者的電腦和手機(jī)冈爹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門涌攻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人频伤,你說我怎么就攤上這事恳谎。” “怎么了憋肖?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵因痛,是天一觀的道長。 經(jīng)常有香客問我岸更,道長鸵膏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任怎炊,我火速辦了婚禮谭企,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘评肆。我一直安慰自己债查,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布瓜挽。 她就那樣靜靜地躺著盹廷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪久橙。 梳的紋絲不亂的頭發(fā)上俄占,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音淆衷,去河邊找鬼颠放。 笑死,一個胖子當(dāng)著我的面吹牛吭敢,可吹牛的內(nèi)容都是我干的碰凶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鹿驼,長吁一口氣:“原來是場噩夢啊……” “哼欲低!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起畜晰,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤砾莱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凄鼻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊瑟,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聚假,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闰非。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膘格。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖财松,靈堂內(nèi)的尸體忽然破棺而出瘪贱,到底是詐尸還是另有隱情,我是刑警寧澤辆毡,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布菜秦,位于F島的核電站,受9級特大地震影響舶掖,放射性物質(zhì)發(fā)生泄漏球昨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一眨攘、第九天 我趴在偏房一處隱蔽的房頂上張望褪尝。 院中可真熱鬧,春花似錦期犬、人聲如沸河哑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璃谨。三九已至,卻和暖如春鲤妥,著一層夾襖步出監(jiān)牢的瞬間佳吞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工棉安, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留底扳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓贡耽,卻偏偏與公主長得像衷模,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒲赂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Hello Word 在屏幕上打印“Hello, world”阱冶,可以用一行代碼實(shí)現(xiàn): 你不需要為了輸入輸出或者字符...
    restkuan閱讀 3,171評論 0 6
  • 常量與變量使用let來聲明常量,使用var來聲明變量滥嘴。聲明的同時賦值的話木蹬,編譯器會自動推斷類型。值永遠(yuǎn)不會被隱式轉(zhuǎn)...
    莫_名閱讀 443評論 0 1
  • 1若皱、范型范型所解決的問題 函數(shù)镊叁、方法尘颓、類型:類,結(jié)構(gòu)體晦譬,枚舉疤苹,元組類型,協(xié)議參數(shù)蛔添,返回值痰催,成員函數(shù)參數(shù)兜辞,成員屬性類...
    我是小胡胡123閱讀 819評論 0 1
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,256評論 1 6
  • “媽迎瞧,‘媽媽’在這個世界上是溫暖的,別讓我去恨別人逸吵⌒坠瑁”兒子在八年后第一次叫她媽媽,同時也說出了這樣的話扫皱。 她很矛盾...
    水曦蕊閱讀 382評論 5 2