這周是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ò)得好快,好好加油吧。