今天周五?;镜娜蝿?wù)都已完成,swift學(xué)習(xí)也順利了許多。
今天發(fā)現(xiàn)一本基于swift2.0的教材,比我原來(lái)看的那邊要更新,而且更薄一點(diǎn),就以這本書(shū)為主繼續(xù)學(xué)吧。目前看到118頁(yè)。
中午上ios論壇,又發(fā)現(xiàn)一本講ios開(kāi)發(fā)框架的書(shū),以swift為基礎(chǔ),只有50頁(yè),看完了這本,大概就可以正式開(kāi)始我的游戲開(kāi)發(fā)了。
1 類(lèi)和結(jié)構(gòu)
所有的結(jié)構(gòu)體都有一個(gè)自動(dòng)生成的成員逐一初始化器,用于初始化新結(jié)構(gòu)體實(shí)例中成員的屬性。新實(shí)例中給個(gè)屬性可以通過(guò)屬性的名稱(chēng)傳遞到成員逐一初始化器中。
例如:
struct Resolution {
var width = 0
var height = 0
}
var resolution = Resolution() //賦默認(rèn)值
var resolution1 = Resolution(width: 3, height: 4)
注:與結(jié)構(gòu)體不同,類(lèi)實(shí)例沒(méi)有默認(rèn)的成員逐一初始化器。
2 結(jié)構(gòu)體和枚舉都是值類(lèi)型。值類(lèi)型被賦值給一個(gè)變量,常數(shù),或者被傳遞給一個(gè)函數(shù)時(shí),實(shí)際上操作的是其的拷貝。
在swift中,所有的基本類(lèi)型:整數(shù),浮點(diǎn)數(shù),布爾值,字符串,數(shù)組,字典都是值類(lèi)型,并且都是以結(jié)構(gòu)體的形式在后臺(tái)實(shí)現(xiàn)的。
所有的結(jié)構(gòu)體的枚舉都是值類(lèi)型,這意味著它們的實(shí)例,以及實(shí)例中包含的任何值類(lèi)型屬性,在代碼中傳遞的時(shí)候都會(huì)被復(fù)制。
注意:這點(diǎn)和python完全不同,需要特別注意。
「===」恒等運(yùn)算符,判斷兩個(gè)常量或者變量是否引用同一個(gè)實(shí)例。
「!==」
3 延遲存儲(chǔ)屬性。使用lazy修飾的屬性為延遲加載屬性,只有在第一次訪(fǎng)問(wèn)時(shí)才會(huì)創(chuàng)建
class DataImporter {
var fileName = "1.txt"
}
class DataManager {
lazy var importer = DataImporter() //不可以用let聲明
var data = [String]()
}
let manager = DataManager()
manager.data.append("123")
print(manager.importer.fileName) //只有在第一次訪(fǎng)問(wèn)時(shí)才會(huì)創(chuàng)建
4 計(jì)算屬性。除了存儲(chǔ)屬性外,swift還提供了計(jì)算屬性。計(jì)算屬性本身并不存儲(chǔ)值,但是提供一種get和set方法來(lái)獲得值,或設(shè)置其他屬性的值。
例如:
struct Point {
var x = 0.0
var y = 0.0
}
struct Size {
var width = 0.0
var height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
return Point(x: origin.x + 2, y: origin.y + 2)
}
set(newPoint) { //便捷寫(xiě)法 set { origin.x = newValue.x ….}
origin.x = newPoint.x
origin.y = newPoint.y
}
}
}
var square = Rect()
print(square.center)
square.center = Point(x: 1, y: 3)
print(square.origin)
明天又是周末了。
雖然還是有霧霾,還是蠻開(kāi)心的。