Swift 語(yǔ)言簡(jiǎn)單介紹(二)

本片文字主要介紹: 結(jié)構(gòu)體 類(lèi) 協(xié)議 擴(kuò)展 閉包

結(jié)構(gòu)體

//  聲明結(jié)構(gòu)體的格式: struct + 結(jié)構(gòu)體名字 + {聲明成員變量等}

struct Frame {
    // 存儲(chǔ)屬性: 僅僅做存儲(chǔ)值的作用
    var x : Float
    var y : Float
    var width : Float
    var height : Float
    // 計(jì)算屬性: 通過(guò)計(jì)算獲取自己的值
    // 設(shè)置屬性的get和set方法
    // 屬性里面的set方法不能單獨(dú)存在,必須有一個(gè)同屬性的get方法存在之后才可以寫(xiě)set
    var centerX : Float {
        get{
            return x + width / 2
        }
        set{
            self.centerX = newValue
        }
    }
    
    var centerY : Float {
        get{
            return y + height / 2
        }
        set{
            self.centerY = newValue
        }
    }
    // 在Swift的結(jié)構(gòu)體里面可以創(chuàng)建一個(gè)init方法  x外部參數(shù)名 newX內(nèi)部參數(shù)名
    init(x newX : Float, y newY : Float, width newWidth : Float, height newHeight : Float) {
        self.x = newX
        self.y = newY
        self.width = newWidth
        self.height = newHeight
    }
    
    // Swift的結(jié)構(gòu)體內(nèi)可以任意創(chuàng)建函數(shù)
    // 如果需要在函數(shù)里面修改屬性值的話,需要在函數(shù)前面添加mutating關(guān)鍵字修持
    mutating func haha() {
        self.x = 100
    }
    
    // 結(jié)構(gòu)體屬性 
    // 結(jié)構(gòu)體屬性是不能在普通的函數(shù)里面去調(diào)用的
    static var name : String? = nil
    // 結(jié)構(gòu)體函數(shù)
    // 結(jié)構(gòu)體函數(shù)里不能調(diào)用普通的屬性
    // 結(jié)構(gòu)體函數(shù)里可以調(diào)用結(jié)構(gòu)體屬性
    // 結(jié)構(gòu)體函數(shù)里可以調(diào)用一些本結(jié)構(gòu)體存在的函數(shù)
    static func sayName() {
        self.name = "我是一個(gè)frame"
        print(self.name)
    }
}
// 調(diào)用方法一
let frame : Frame = Frame.init(x: 10, y: 20, width: 30, height: 40)
print(frame.centerX, frame.centerY)
// 調(diào)用方法二
let frame1 : Frame = Frame(x: 100, y: 100, width: 100, height: 100)
print(frame1.centerX, frame1.centerY)

// 調(diào)用結(jié)構(gòu)體函數(shù), 必須要通過(guò)結(jié)構(gòu)體去調(diào)用
Frame.sayName()

類(lèi)

/ 類(lèi)的格式: class(關(guān)鍵字) + 類(lèi)名 { 類(lèi)的實(shí)現(xiàn) }
class Person {
    // 在類(lèi)里面創(chuàng)建一個(gè)屬性的時(shí)候,必須有初值,如果不想設(shè)置初值,那么就設(shè)置成可選類(lèi)型
    var name : String? = nil
    var age : Int? = nil
    
    // private 表示的是私有屬性
    private var gender : String? = nil
    
    // static 修飾的屬性表示類(lèi)屬性
    static var county : String? = nil
    
    // 初始化方法
    init(name newName : String, age newAge : Int){
        self.name = newName
        self.age = newAge
    }
    
    // 實(shí)例方法里面不能直接調(diào)用類(lèi)屬性
    // 實(shí)例方法可以直接對(duì)實(shí)例對(duì)象進(jìn)行修改賦值
    // 在函數(shù)聲明之前添加一個(gè)private 表示私有方法
    private func sayHi() {
        self.gender = "女"
        print(self.gender)
    }
    
    // static修飾的是類(lèi)方法 
    // static修飾的類(lèi)方法是不可以被子類(lèi)重寫(xiě)的
    static func sayHello() {
        self.county = "中國(guó)"
        print(self.county)
    }
    // class修飾的也是類(lèi)方法
    // class修飾的類(lèi)方法可以被子類(lèi)重寫(xiě)
    class func sayNihao() {
        self.county = "china"
        print(self.county)
    }
}

// 賦值調(diào)用
let person : Person = Person.init(name: "八戒", age: 30)
//let person : Person = Person(name: "八戒", age: 30)
print(person.name,person.age)

person.sayHi()

Person.sayHello()
Person.sayNihao()

// 繼承
class Student: Person {
    
    // 如果子類(lèi)想重寫(xiě)父類(lèi)的方法,需要加override修飾
    override init(name newName: String, age newAge: Int) {
        super.init(name: newName, age: newAge)
    }
    
//    self.sayHhi() // 不能調(diào)用父類(lèi)私有方法
    // 重寫(xiě)類(lèi)方法
    override class func sayNihao() {
        
    }
}

協(xié)議

// 格式 protocol(關(guān)鍵字) + 協(xié)議名字
// Swift協(xié)議里的方法必須實(shí)現(xiàn)
protocol myDelegate {
    // 協(xié)議方法前面添加mutating修持的關(guān)鍵字之后, 可以修改結(jié)構(gòu)體里面的參數(shù),
    mutating func hehehe()
}

// 如果有需要可選實(shí)現(xiàn)的協(xié)議,在最前面添加 @objc 修飾,內(nèi)部的方法用optional修飾可選實(shí)現(xiàn)的方法,其他的不變 (OC的協(xié)議)
@objc protocol newDelegate {
    optional func lalala()
}


// 如果一個(gè)類(lèi)即有父類(lèi), 也遵守了某個(gè)協(xié)議, 那么格式是: class + 類(lèi)名:父類(lèi), 協(xié)議名
class Teacher : Person, myDelegate, newDelegate{
    func hehehe(){
    
    }
}
// 如果沒(méi)有父類(lèi),可直接遵守協(xié)議
class newClass : myDelegate {
    func hehehe() {
        
    }
}

// 結(jié)構(gòu)體可以遵守協(xié)議 但是結(jié)構(gòu)體只能遵守Swift的協(xié)議
struct newStruct : myDelegate {
    var name : String
    mutating func hehehe() {
        self.name = "asd"
    }
}

擴(kuò)展

// extension + 類(lèi)名/結(jié)構(gòu)體名 可以對(duì)一個(gè)類(lèi)和結(jié)構(gòu)體擴(kuò)展方法
 // extension可以多次對(duì)一個(gè)類(lèi)進(jìn)行擴(kuò)展,也可以給一個(gè)類(lèi)擴(kuò)展協(xié)議方法

// 給類(lèi)擴(kuò)展一個(gè)新方法
extension Person {
    func eat() {
        print("吃飯")
    }
    // extension不可以添加新的屬性
//    var height : Float? = nil
}
// 調(diào)用
person.eat()

枚舉

enum time {
    case spring
    case summer
    case autumn
    case winter
}
// 使用枚舉的時(shí)候,初次給變量賦值,必須使用 枚舉名.case名
var timer = time.autumn
// 第二次使用的時(shí)候 可以直接通過(guò) .case名 使用
timer = .spring

// switch 搭配枚舉使用
// switch 的value 要填一個(gè)枚舉類(lèi)型的實(shí)例變量
// case .枚舉的case名字
switch timer {
case .spring:
    print("春天")
case .summer:
    print("夏天")
case .autumn:
    print("秋天")
case .winter:
    print("冬天")
}

閉包

// 閉包是自包含的函數(shù)代碼塊,可以在代碼中被傳遞和使用. Swift中的閉包與OC中的代碼塊(block)以及其他一些編程語(yǔ)言中的匿名函數(shù)比較相似
// 閉包可以捕獲和存儲(chǔ)其上下文中任意常量和變量的引用. 這就是所謂的閉合并包裹著這些常量和變量,俗稱(chēng)閉包. Swift會(huì)為你管理在捕獲過(guò)程中涉及到的所有內(nèi)存操作
// 注意: 閉包的函數(shù)體部分由關(guān)鍵字in引入. 該關(guān)鍵字表示閉包的參數(shù)和返回值類(lèi)型定義已經(jīng)完成, 閉包函數(shù)體即將開(kāi)始
// 閉包格式 名字 : ((參數(shù)) -> 返回值類(lèi)型)
var newPassValue : ((a : Int, b : Int) -> Int)

// 第一種寫(xiě)法 閉包表達(dá)式的寫(xiě)法
newPassValue = { (a : Int, b : Int) -> Int in
    return a > b ? a : b
}

// 第二種寫(xiě)法 蘋(píng)果推薦的寫(xiě)法
newPassValue = { (a , b) -> Int in
    return a > b ? a : b
}

// 第三種寫(xiě)法 $0:第一個(gè)參數(shù) $1:第二個(gè)參數(shù) 以此類(lèi)推
newPassValue = {
    $0 > $1 ? $0 : $1
}

// 第四種寫(xiě)法
newPassValue = { (a, b) in
    return a > b ? a : b
}

// 第五種寫(xiě)法
newPassValue = { (a, b) in
    a > b ? a : b
}

print(newPassValue(a: 3,b: 8))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饰潜,隨后出現(xiàn)的幾起案子初坠,更是在濱河造成了極大的恐慌,老刑警劉巖彭雾,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碟刺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡薯酝,警方通過(guò)查閱死者的電腦和手機(jī)半沽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吴菠,“玉大人者填,你說(shuō)我怎么就攤上這事∽隹” “怎么了占哟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)酿矢。 經(jīng)常有香客問(wèn)我榨乎,道長(zhǎng),這世上最難降的妖魔是什么瘫筐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任蜜暑,我火速辦了婚禮,結(jié)果婚禮上严肪,老公的妹妹穿的比我還像新娘史煎。我一直安慰自己谦屑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布篇梭。 她就那樣靜靜地躺著氢橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恬偷。 梳的紋絲不亂的頭發(fā)上悍手,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音袍患,去河邊找鬼坦康。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诡延,可吹牛的內(nèi)容都是我干的滞欠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肆良,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼筛璧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起惹恃,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夭谤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后巫糙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體朗儒,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年参淹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醉锄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浙值,死狀恐怖榆鼠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亥鸠,我是刑警寧澤妆够,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站负蚊,受9級(jí)特大地震影響神妹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜家妆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一鸵荠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伤极,春花似錦蛹找、人聲如沸姨伤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乍楚。三九已至,卻和暖如春届慈,著一層夾襖步出監(jiān)牢的瞬間徒溪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工金顿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臊泌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓揍拆,卻偏偏與公主長(zhǎng)得像渠概,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫂拴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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