Swift語(yǔ)言初探(二)

(一) 結(jié)構(gòu)體
  • 關(guān)鍵字 - - - - frame
    1.屬性分類(lèi):在Swift語(yǔ)言中結(jié)構(gòu)體分為兩種屬性,第一種為儲(chǔ)存屬性,粗存屬性?xún)H僅是用來(lái)做存儲(chǔ)值得作用;第二種為計(jì)算屬性,計(jì)算屬性通過(guò)計(jì)算來(lái)獲取自己的值.
    2.屬性的作用:
    (1)聲明了setter和getter方法;
    (2)實(shí)現(xiàn)了setter和getter方法;
    (3)聲明了一個(gè)和此屬性同名并帶下劃線(xiàn)的成員變量;
    <示例代碼如下>
  struct Frame {
//在Swift中,X,Y,長(zhǎng)和寬都為存儲(chǔ)屬性
    var x : Float
    var y : Float
    var width :Float
    var height : Float
//變量屬性(重寫(xiě)getter方法和setter方法都直接寫(xiě)在變量屬性之中)
    var centerX : Float {
        get{
            return x + width / 2
        }
        set{
             self.centerX = newValue  //newValue表示新值
        } }
    var centerY : Float {
        get{
            return y + height / 2
        }
        set{
            self.centerY = newValue  //newValue便是新值
        }
    }
  • 注意 : 在Swift語(yǔ)法中,setter方法是不允許單獨(dú)存在的,如果想要重寫(xiě)setter方法,必須要有一個(gè)同屬性額getter方法存在之后才可以重寫(xiě)setter 方法

3.結(jié)構(gòu)體初始化方法(init方法)
外部參數(shù)名:(例如X,Y,Width,Height)
內(nèi)部參數(shù)名:(例如newX等)
<示例代碼如下>

//在Swift的結(jié)構(gòu)體里面,可以創(chuàng)建一個(gè)init方法
    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
    }

4.修改函數(shù)屬性的值
<示例代碼如下>

   //在Swift結(jié)構(gòu)體函數(shù)里面修改屬性的值  要在函數(shù)前面添加mutating關(guān)鍵字修飾
    mutating func daniuniu() {
        self.x = 100
    }
  • mutating關(guān)鍵字的作用: Swift的結(jié)構(gòu)體可以任意的創(chuàng)建函數(shù),但如果需要在函數(shù)里面修改屬性的值得話(huà)需要在函數(shù)前面添加mutating關(guān)鍵字修飾

5.屬性:
(1)結(jié)構(gòu)體屬性是不能在普通的函數(shù)里面去調(diào)用的;
(2)結(jié)構(gòu)體函數(shù)里面可以調(diào)用結(jié)構(gòu)體屬性
(3)結(jié)構(gòu)體函數(shù)里面可以調(diào)用一些本結(jié)構(gòu)體內(nèi)存在的函數(shù)
<示例代碼如下>

//結(jié)構(gòu)體屬性是不能再普通的函數(shù)里面去調(diào)用的
    static var name : String? = nil
      //結(jié)構(gòu)體函數(shù)
    static func sayName() {
        self.name = "我是一個(gè)frame"
        print(self.name)   
    }
}

6.結(jié)構(gòu)體函數(shù)調(diào)用方法

let fram :Frame = Frame.init(x: 10, y: 10, width: 10, height: 10)
 print(fram.centerY, fram.centerX)

let fram1 : Frame = Frame(x: 100, y: 100, width: 100, height: 100)
 print(fram1.centerX, fram1.centerY)
//調(diào)用接頭體函數(shù),必須得通過(guò)這個(gè)二結(jié)構(gòu)體去調(diào)用
Frame.sayName()

(二) 類(lèi)
  • 類(lèi)的格式 : class 關(guān)鍵字 + 類(lèi)名 {類(lèi)的實(shí)現(xiàn)}
    1.屬性 : 在類(lèi)里面創(chuàng)建一個(gè)屬性的時(shí)候,必須要有初值,如果不想設(shè)置初始值,那么就設(shè)置成為可選類(lèi)型(nil)
    (1)私有屬性: 用private這個(gè)關(guān)鍵字來(lái)表示
    (2)類(lèi)屬性:用static這個(gè)關(guān)鍵字來(lái)表示
  • 注意:
    1>實(shí)例方法里面不能直接調(diào)用類(lèi)屬性;但是可以直接對(duì)實(shí)例對(duì)象進(jìn)行修改賦值
    2>在函數(shù)證明之前添加private表示私有方法
    <實(shí)例代碼如下>
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 country : 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 表示私有方法
    func sayHi() {
        self.gender = "男"
    } 
    //static 修飾的是類(lèi)方法
    //static 修飾的方法是不可以被子類(lèi)重寫(xiě)的
    static func sayHello() {
        self.country = "中國(guó)"
        print(self.country)
    }
     //class 修飾的也是類(lèi)方法
    //class 修飾的方法可以被子類(lèi)重寫(xiě)
    class func sayNihao() {
        self.country = "China"
        print(self.country)   
    }  
}

2.class與static修飾類(lèi)方法的區(qū)別: static修飾類(lèi)方法不可以被子類(lèi)重寫(xiě),但是class修飾的類(lèi)方法可以被子類(lèi)重寫(xiě)

< 結(jié)構(gòu)體與類(lèi)的區(qū)別 >
1.屬性:結(jié)構(gòu)體里面創(chuàng)建屬性不需要給類(lèi)型和初值,類(lèi)里面要給初始值或者可選類(lèi)型
2.類(lèi)方法重寫(xiě):結(jié)構(gòu)體里用
3.類(lèi)用class修飾,結(jié)構(gòu)體用struct


(三) 協(xié)議
  • 格式 : protocol 關(guān)鍵字 + 協(xié)議名字
protocol myDelegate {
    //沒(méi)有返回值的寫(xiě)法
  //學(xué)一方法前面添加mutating修飾的關(guān)鍵字之后,可以修改結(jié)構(gòu)體里面的參數(shù),在類(lèi)里面會(huì)自動(dòng)的忽略mutating
    mutating func daniuniu()
    //有返回值的寫(xiě)法
    func daniuniu() -> String
}

//如果一個(gè)類(lèi)既有父類(lèi) 也遵守了摸個(gè)協(xié)議,那么它的格式是: class + 類(lèi)名:父類(lèi),協(xié)議名字
class Teacher: Person {...}

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

@objc protocol newDelegate{
    optional func lalala()
}
class newClass: myDelegate,newDelegate {
    func daniuniu() { ... }
}
//結(jié)構(gòu)體可以遵守協(xié)議,但是結(jié)構(gòu)體只能遵守Swift的協(xié)議,不能遵守OC的協(xié)議
struct newStudent : myDelegate {
    var name : String
  mutating  func daniuniu() {
        self.name = "niuniu"
    }
}

//extension可以給一個(gè)類(lèi)拓展新的協(xié)議

extension Person :myDelegate {
    func daniuniu() { ... }
     //extension不可以添加新的屬性
     //  var height : Float? = nil
     //可以給一個(gè)類(lèi)添加新的函數(shù)
    func fuwei() { ... }
}
//extension 可以給一個(gè)結(jié)構(gòu)體拓展新的協(xié)議
extension Frame : myDelegate { ... }

//枚舉

enum time {
    case spring
    case summer
    case autumn
    case winter
}
//使用枚舉的時(shí)候,初次給變量賦值,必須使用枚舉名.case名
var timer = time.autumn
//第二次使用的時(shí)候 可以直接通過(guò).case名使用
timer = .spring
//switch 搭配枚舉使用
//switch 的value要填寫(xiě)一個(gè)枚舉類(lèi)型的實(shí)例變量
//case .枚舉的case名字
switch timer {
case .spring:
    print("春天")
case .summer:
    print("夏天")
case .autumn:
    print("秋天")
case .winter:
    print("冬天")
}

(四) 閉包
  • 表達(dá)式 : 閉包名字: ((參數(shù)) -> 返回值類(lèi)型)
    var newPassValue : ((a : Int, b : Int) -> Int)
  • 閉包表達(dá)式的三種寫(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ě)法
newPassValue = {
    $0 > $1 ? $0 : $1
    }
newPassValue = { (a, b) in
    return a > b ? a : b
    }
newPassValue = {(a , b) in
    a > b ? a : b
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掏击,一起剝皮案震驚了整個(gè)濱河市填抬,隨后出現(xiàn)的幾起案子穴墅,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弄慰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胃碾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筋搏,“玉大人仆百,你說(shuō)我怎么就攤上這事”计辏” “怎么了俄周?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)髓迎。 經(jīng)常有香客問(wèn)我峦朗,道長(zhǎng),這世上最難降的妖魔是什么排龄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任波势,我火速辦了婚禮,結(jié)果婚禮上涣雕,老公的妹妹穿的比我還像新娘艰亮。我一直安慰自己,他們只是感情好挣郭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布迄埃。 她就那樣靜靜地躺著,像睡著了一般兑障。 火紅的嫁衣襯著肌膚如雪侄非。 梳的紋絲不亂的頭發(fā)上蕉汪,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音逞怨,去河邊找鬼者疤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叠赦,可吹牛的內(nèi)容都是我干的驹马。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼除秀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼糯累!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起册踩,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泳姐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后暂吉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胖秒,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年慕的,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阎肝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡业稼,死狀恐怖盗痒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情低散,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布骡楼,位于F島的核電站熔号,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鸟整。R本人自食惡果不足惜引镊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篮条。 院中可真熱鬧弟头,春花似錦、人聲如沸涉茧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伴栓。三九已至伦连,卻和暖如春雨饺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惑淳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工额港, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歧焦。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓移斩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绢馍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子向瓷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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