swift學(xué)習(xí)-mutating,下標(biāo)重載-12/27 (第二周)

這周是swift學(xué)習(xí)的第二周,感覺(jué)進(jìn)步還是蠻快的。
以后增加一個(gè)回顧的過(guò)程,在每周結(jié)束時(shí)回顧這一周的學(xué)習(xí)。加深一些理解。
這周的10小時(shí)目標(biāo)基本完成,感覺(jué)實(shí)際的學(xué)習(xí)時(shí)間在12-13個(gè)小時(shí),基本把上周缺的時(shí)間補(bǔ)齊了。
目前為止,一共學(xué)習(xí)的時(shí)間是20小時(shí),很好的保證了進(jìn)度。
下周總體來(lái)看,任務(wù)好像也不重,又可以開(kāi)心的學(xué)習(xí)ios了。
今天看到第133頁(yè)。筆記如下:
1 在實(shí)例中修改值類(lèi)型。
一般來(lái)說(shuō),值類(lèi)型的屬性不能在它的實(shí)例方法中被修改。
但是,如果你確實(shí)需要修改某個(gè)值,可以選擇變異(mutating)這個(gè)方法。

struct Point {
    var x = 0.0
    var y = 0.0

    mutating func moveBy(deltaX: Double, deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}

var pointA = Point(x: 1, y: 2)

print(pointA)
pointA.moveBy(2.0, deltaY: 1.0)
print(pointA)

注:不能在常量結(jié)構(gòu)體(let聲明)中調(diào)用mutating方法。

2 枚舉變異方法可以把self設(shè)置為相同的枚舉類(lèi)型中不同的成員:

enum TriStateSwitch {
    case OFF, LOW, HIGH

    mutating func next() -> TriStateSwitch {
        switch self {
        case .OFF:
            self = LOW
        case .LOW:
            self = HIGH
        case .HIGH:
            self = OFF
        }

        return self
    }
}

var ovenLight = TriStateSwitch.LOW

print(ovenLight.next())
print(ovenLight)

3 下標(biāo)重載,重載[]訪問(wèn)符。
類(lèi)似setter和getter,定義原型為:

subscript(index: Int) -> Int {
    get {
        //…
    }

    set {
        // newValue
    }
}

struct TimeTable {
    let multiplier : Int

    subscript(index: Int) -> Int {
        return index * multiplier
    }
}

let threeTimesTable = TimeTable(multiplier: 3)

print(threeTimesTable[3])

//多參數(shù)示例
struct Matrix {
    let rows: Int
    let columns: Int
    var grid: [Double]

    init(rows: Int, columns: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(count: rows*columns, repeatedValue: 0.0)
    }

    subscript(row: Int, column: Int) -> Double {
        get {
            return grid[row*columns + column]
        }

        set {
            grid[row*columns + column] = newValue
        }
    }
}

var matrix = Matrix(rows: 5, columns: 7)

print(matrix[2, 3])
matrix[3, 3] = 3.2

新的一周就要開(kāi)始啦,2015年的最后一周。時(shí)間過(guò)得好快,好好加油吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容