//使用class 和類名來創(chuàng)建一個類愧捕,類中屬性的聲明和常量酌泰,變量聲明一樣荠察,唯一的區(qū)別就是它們的上下文是類,同樣,方法和函數(shù)聲明也一樣
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shap with \(numberOfSides) sides."
}
}
//要創(chuàng)建一個類的實(shí)例,在類后面加上括號,使用點(diǎn)語法來訪問實(shí)例的屬性和方法
let shape = Shape()
shape.numberOfSides = 7
let shapeDescription = shape.simpleDescription()
print(shapeDescription)
//使用init來創(chuàng)建一個構(gòu)造器
class NameShape {
var numberOfSides:NSInteger = 0
var name : String
init(name:String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) \(name) sides."
}
}
//注意self被用來區(qū)別實(shí)例變量壶冒,當(dāng)你創(chuàng)建實(shí)例的時候,像傳入函數(shù)參數(shù)一樣給類傳入構(gòu)造器的參數(shù)截歉,每個屬性都需要賦值-無論是通過聲明(就像numberOfSides 還是通過構(gòu)造器)
let nameShape = NameShape(name:"hello")
nameShape.numberOfSides = 10
let nameshapeDis = nameShape.simpleDescription()
print(nameshapeDis)
//如果需要在刪除對象之前進(jìn)行一些清理工作胖腾,使用deinit創(chuàng)建一個析構(gòu)函數(shù)。子類的定義方法是在它們的類名后面加上父類的名字怎披,用冒號分割胸嘁。創(chuàng)建類的時候并不需要一個標(biāo)準(zhǔn)的根類,所以你可以忽略父類凉逛。子類如果要重寫父類的方法的話,需要用override標(biāo)記--如果沒有添加override就重寫父類方法的話編譯器會報錯群井,編譯器同樣會檢測override標(biāo)記的方法是否確實(shí)在父類中
class Square:NameShape {
var sideLength:Double
init(sideLength:Double ,name:String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength*sideLength
}
override func simpleDescription() -> String {
return "B square with sides of length \(sideLength)"
}
}
let test = Square(sideLength:5.2,name:"my test squate")
print(test.area(),test.simpleDescription())
//除了儲存簡單的屬性之外状飞,屬性可以有g(shù)etter 和 setter 。
class EquilateralTriangle:NameShape {
var sideLength:Double = 0.0
init(sideLength:Double,name:String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter:Double {
get{
return 3.0 * sideLength
}
set{
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triagle with sides of length \(sideLength)."
}
}
var triangle = EquilateralTriangle(sideLength:3.1,name:"a triangle")
print(triangle.perimeter)
triangle.perimeter = 9.9
print(triangle.sideLength)
//在perimeter 的 setter 中书斜,新值得名字是newValue诬辈。你可以在set之后顯示的設(shè)置一個名字
//注意 EquilateralTriangle,類的構(gòu)造器執(zhí)行了三步:1荐吉,設(shè)置子類聲明的屬性值焙糟,2:調(diào)用父類的構(gòu)造器,3:改變父類定義的屬性值样屠。其他的工作比如調(diào)用方法穿撮,getters和setters也可以在這個階段完成。
//如果不需要計(jì)算屬性痪欲,但是任然需要在設(shè)置一個新值之前或者之后運(yùn)行代碼悦穿,使用willSet和didSet。
//比如业踢,下面的類確保三角形的邊長總是和正方形的邊長相同
class TriangleAndSuqare {
var triangle:EquilateralTriangle {
willSet{
square.sideLength = newValue.sideLength
}
}
var square:Square {
willSet{
triangle.sideLength = newValue.sideLength
}
}
init(size:Double,name:String) {
square = Square(sideLength:size,name:name)
triangle = EquilateralTriangle(sideLength:size,name:name)
}
}
let triangleAndSquare = TriangleAndSuqare(size: 10, name: "another test shape")
print(triangleAndSquare.square.sideLength)
print(triangleAndSquare.triangle.sideLength)
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
print(triangleAndSquare.triangle.sideLength)
//處理變量的可選值時栗柒,可以在操作(比如方法,屬性知举,和子腳本)之前加瞬沦?,如果雇锡?之前的值是nil逛钻,?后面的東西都會被忽略遮糖,并且整個表達(dá)式返回nil绣的,否則,?之后的東西都會被運(yùn)行屡江,在這兩種情況下芭概,整個表達(dá)式的值也是一個可選值
let optionalSquare:Square? = Square(sideLength:2.5,name:"optional square")
let sideLength = optionalSquare?.sideLength
print(sideLength ?? 2)
Swift學(xué)習(xí)二 類和對象
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劳闹,“玉大人院究,你說我怎么就攤上這事”咎椋” “怎么了业汰?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長菩颖。 經(jīng)常有香客問我样漆,道長,這世上最難降的妖魔是什么晦闰? 我笑而不...
- 正文 為了忘掉前任放祟,我火速辦了婚禮,結(jié)果婚禮上鹅髓,老公的妹妹穿的比我還像新娘舞竿。我一直安慰自己,他們只是感情好窿冯,可當(dāng)我...
- 文/花漫 我一把揭開白布骗奖。 她就那樣靜靜地躺著,像睡著了一般醒串。 火紅的嫁衣襯著肌膚如雪执桌。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼颓芭,長吁一口氣:“原來是場噩夢啊……” “哼顷锰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亡问,我...
- 序言:老撾萬榮一對情侶失蹤官紫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后州藕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束世,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年床玻,在試婚紗的時候發(fā)現(xiàn)自己被綠了毁涉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布粱檀,位于F島的核電站洲敢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茄蚯。R本人自食惡果不足惜压彭,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗常。 院中可真熱鬧壮不,春花似錦、人聲如沸皱碘。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽癌椿。三九已至健蕊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踢俄,已是汗流浹背缩功。 一陣腳步聲響...
- 正文 我出身青樓虑稼,卻偏偏與公主長得像目锭,于是被迫代替她去往敵國和親雄嚣。 傳聞我的和親對象是個殘疾皇子底洗,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 怎樣反思自己的教學(xué)——學(xué)習(xí)杜威《我們怎樣思維》有感 2015-01-13 14:56:52 來源:普寧市第三中學(xué)網(wǎng)...
- 透析記5.24 今日透析裕便。 早上五點(diǎn)鐘就一骨碌從床上爬起來寨辩,五點(diǎn)十分禁舷,口臉都沒有洗违霞,收拾好東西亩码,跨上電動車就出發(fā)震蒋,...
- “關(guān)外野店查剖,煙火絕钾虐,客怎眠∷褡”“客怎眠”說的實(shí)際是傷心人怎眠效扫,詞中主人公為追尋心上人而天涯羈旅,旅居關(guān)外小店直砂,心...
- 2017.10.4 星期三 雨 今日中秋節(jié)静暂,在家里陪家人賞月济丘。乖乖的,哪里也不去啦洽蛀!呵呵摹迷! 放棄...