iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
1

分類:基本知識學習


1. Class中的failable initializer(可失敗初始化器)

import UIKit
class Baby {
    var age:Int?
    var name:String?   
    init?(age:Int, name:String){
        self.age = age
        self.name = name      
        if age < 0 {
            return nil
        }
    }
}
var cuteBaby = Baby(age:-1, name: "John")
if let baby = cuteBaby{
    print("John is born")
}else{
    print("the age condition is wrong")
}

執行結果
the age condition is wrong

swift程式設計入門,彼得潘
上面的程式碼中init後面加?或!的initializer稱為failable initializer ,此初始化器的物件型別為optional,也就是cuteBaby的型別為Baby?,因此需要進行optional binding。擷取上面一段程式碼

if age < 0 {
            return nil
        }

說明在age < 0的情況下回傳nil,所以 var cuteBaby = Baby(age:-1, name: "John”),cuteBaby的值為nil,結果為the age condition is wrong

2. 計算屬性

  • computed property並不真的儲存值,而是藉由一個get(一定要有,代表可讀取)及一個set(未必要有,代表可寫) -> get是利用相關的stored property來計算並進行讀取,而set則利用計算來改變相關的stored property。
  • 由於computed property是經由計算得到的,所以無法預設推理型別,因此依定要指定資料型別。
  • 不需要初始值。
  • 以變數宣告,不以常數宣告(因為計算屬性是由相關的stored property計算得到的,並非定值)。
class Square {
    var x:Double
    var y:Double
    var width:Double
    init(x:Double,y:Double,width:Double) {
        self.x = x
        self.y = y
        self.width = width
    }
    var centerX:Double{
        get {
            return x + width/2
        }
        set (newCenterX){
            x = newCenterX - width/2
        }
    }
}

上面的程式碼我們設定一個計算屬性名稱為centerX,get代表可讀入 -> centerX會隨著x及width的關係來改變;set代表可寫入,我們也可以自行設定centerX的值,這樣就可以順便去更改x的值(因為x被設定成newCenterX - width/2)。下面是應用範例:

var aSquare = Square(x: 5, y: 10, width: 10)
aSquare.x
aSquare.centerX
aSquare.centerX = 20
aSquare.x

在第二行中,會得到x的值為5。
在第三行中,會得到centerX的值為10。
在第四行中,現在我們設定計算屬性centerX的值為20(可以想成我們這樣寫,會觸發到我們在centerX定義的set,此時設定的20會被代入newCenterX,因為這樣所以x = 20 - 10/2 = 15,所以第五行會跑出15的值)。
註1:如果在set後面我們沒有自行定義名稱newCenterX,則xcode預設是會變成newValue。

set {
        x = newValue - width/2
      }

註2:如果現在只有寫入get,而沒有set,則可以簡化成

 var centerX:Double{
            return x + width/2
    }

上一篇
Swift從零開始-Day3:第三方函式庫CocoaPods與Git, GitHub基本用法學習(1)
下一篇
Swift從零開始-Day5:UITableView基礎學習
系列文
Swift零基礎實作旅遊景點app30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
陳董 Don
iT邦新手 5 級 ‧ 2017-12-23 16:40:38

素晴らしい~~

我要留言

立即登入留言