Swift 十二講 第七章 結(jié)構(gòu)體和聚合體 ,訪問控制

1. 結(jié)構(gòu)體

Swift的Structure和類非常相似蒋歌,同樣都有屬性方法函數(shù)等等聋亡。但有幾個關(guān)鍵不同:

  • 結(jié)構(gòu)體無繼承。所以自然也沒有類下降之類的東西近零。
  • 結(jié)構(gòu)體是值拷貝。當你創(chuàng)建了一個結(jié)構(gòu)體后抄肖,你的變量名的意思就是這個實例久信。而不是這個實例的名字。這和類是不同的漓摩。為了強調(diào)這點裙士。我們看下面的例子:
// Value type example
struct S { var data: Int = -1 }
var a = S()
var b = a                       // a is copied to b
a.data = 42                     // Changes a, not b
println("\(a.data), \(b.data)") // prints "42, -1"

// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x                       // x is copied to y
x.data = 42                     // changes the instance referred to by x (and y)
println("\(x.data), \(y.data)") // prints "42, 42"

上面的例子取自
https://developer.apple.com/swift/blog/?id=10
算是少見的好例子。計算機書和網(wǎng)站上舉例語法的時候管毙,為了說明自己的例子可能在現(xiàn)實世界發(fā)生腿椎,往往會用什么電話號碼本桌硫,計算器,員工紀錄啃炸,算小費之類的愚蠢的例子铆隘。實際上那些例子非常分散讀者的注意力。有時候幾個a,b,c整數(shù)就可以清楚的說明語法的關(guān)鍵所在的問題南用,有的書弄好幾段解釋員工紀錄是怎么回事膀钠。這不是故意害人么。筆者認為一個語言的feature,和這個feature在寫app時候好不好用训枢,有沒有用托修,那是另一回事,應(yīng)該盡全力和語言介紹分開恒界。

  • 結(jié)構(gòu)體的變異方法

默認情況下睦刃,結(jié)構(gòu)體的方法不能改變結(jié)構(gòu)體的屬性。但你可以用關(guān)鍵字mutating定義變異方法用來改變結(jié)構(gòu)體的屬性十酣。例如:

struct a {
var kk = 1
    mutating func b()
    {
        kk = 2
    }
}

var d = a()
println(d.kk) //輸出1
d.b()
println(d.kk) //變異方法被調(diào)用過了涩拙,所以輸出為2
  • 結(jié)構(gòu)體的類型方法和類的相似,但是用static關(guān)鍵字耸采。如下例:
struct a {
    static func b()
    {
        println("結(jié)構(gòu)體的類型方法被調(diào)用")
    }

   }

   a.b() //輸出為:"結(jié)構(gòu)體的類型方法被調(diào)用"

2. 聚合體

聚合體就是一組名字的集合兴泥。然后給這組名字起了個名字。這個集合的名字虾宇,就是一個新的類型搓彻。

想想看, Int不就是所有整數(shù)集合的名字么?

例如:

enum ac {
case 兔
case 狗
case 熊貓
}

var a = ac.兔

switch a
{
case .兔 :
println("兔子")
default:
println()
}  //輸出:兔子

聚合體也有類型方法和實例方法嘱朽。定義和用法和結(jié)構(gòu)體類似旭贬。具體細節(jié)讀者可以查手冊,這里不多講搪泳。

  1. 訪問控制

Swift有三個訪問控制關(guān)鍵字稀轨,訪問范圍從大到小為:

  • public 這個關(guān)鍵字所修飾的項,可以在一切地方使用岸军。
  • internal 這是默認的訪問狀態(tài)奋刽,這個關(guān)鍵字修飾的項,只能在同模塊內(nèi)使用艰赞。
  • private 這個關(guān)鍵字修飾的項佣谐,只能在同一個文件內(nèi)被使用。

訪問控制要注意兩點:

  1. 和object c混合編程的時候方妖,細節(jié)很麻煩台谍。要小心注意。

  2. Swift訪問控制的大小匹配要符合常識。例如一個類是private的趁蕊,你不能把這個類的實例用pubilc修飾。但反過來則是可以的仔役。這是因為類比實例在邏輯上更靠前掷伙。一個類如果是private的,你也不能把它的屬性用pubilc修飾又兵。另外如果一個類或者類型的訪問控制是public,其成員屬性方法的默認訪問控制將會是internal任柜。也就是說,你需要給成員屬性方法明確加上pubilc,其成員才能是public沛厨。

  3. 委托初始化

結(jié)構(gòu)體都可以委托初始化宙地。也就是說,它們可以有多個init函數(shù)逆皮,其中一個可以去調(diào)用另一個宅粥。這有什么好處呢? 這樣可以在生成實例的時候更加靈活电谣。例如你想有兩種實例生成的辦法秽梅,一種是傳個參數(shù)讓它生成你需要的實例。另一種是不傳參數(shù)剿牺,讓它生成默認的實例企垦。這種用法類似于類的快捷初始化。

例如:

struct a {
init (c: Int){println(c)}
init(){
    self.init(c:10)
    
}
}

var b = a(c:1)  //輸出1
b = a()    //輸出10

比較下面的類的快捷初始化:

class a {
init (c: Int){println(c)}
convenience  init(){
    self.init(c:10)
    
}
}

var b = a(c:1) //輸出1
b = a()    //輸出10
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晒来,一起剝皮案震驚了整個濱河市钞诡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌湃崩,老刑警劉巖荧降,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竹习,居然都是意外死亡誊抛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門整陌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拗窃,“玉大人,你說我怎么就攤上這事泌辫∷婵洌” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵震放,是天一觀的道長宾毒。 經(jīng)常有香客問我,道長殿遂,這世上最難降的妖魔是什么诈铛? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任乙各,我火速辦了婚禮,結(jié)果婚禮上幢竹,老公的妹妹穿的比我還像新娘耳峦。我一直安慰自己,他們只是感情好焕毫,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布蹲坷。 她就那樣靜靜地躺著,像睡著了一般邑飒。 火紅的嫁衣襯著肌膚如雪循签。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天疙咸,我揣著相機與錄音县匠,去河邊找鬼。 笑死罕扎,一個胖子當著我的面吹牛聚唐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腔召,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼杆查,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臀蛛?” 一聲冷哼從身側(cè)響起亲桦,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浊仆,沒想到半個月后客峭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡抡柿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年舔琅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲劣。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡备蚓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囱稽,到底是詐尸還是另有隱情郊尝,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布战惊,位于F島的核電站流昏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜况凉,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一谚鄙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刁绒,春花似錦襟锐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚊荣。三九已至初狰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間互例,已是汗流浹背奢入。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媳叨,地道東北人腥光。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像糊秆,于是被迫代替她去往敵國和親武福。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容