集合類型:
Swift铲球,和其他現(xiàn)代編程語言一樣,有內(nèi)置的集合類型數(shù)組(Array)和字典(Dictionary),還增加了第三種類型集合(Set)箱沦。數(shù)組和字典非常重要以至于Swift提供了很多特殊的語法。同時(shí)像其他的大部分Swift類型雇庙,它也提供了一些相關(guān)的的函數(shù)谓形;NSArray和NSDictionary也會補(bǔ)充一些丟失的函數(shù)。而集合類型則是橋接至Cocoa的NSSet状共。
數(shù)組(Array):
數(shù)組(結(jié)構(gòu)體)是有序的對象實(shí)例的集合(數(shù)組的元素)套耕,可以使用Int類型的序號來取出元素。而且序號是從0開始的峡继。比如一個數(shù)組有四個元素冯袍,那么它就是從0到3。Swift的數(shù)組是非空的,所以如果有Index3那么就要有0—2.
最顯著的Swift數(shù)組特性是其嚴(yán)格類型檢驗(yàn)康愤。不想有些其他的語言儡循,Swift數(shù)組的元素必須統(tǒng)一,也就是說征冷,其必須是由確定的一種類型的元素所組成的择膝。即便是空數(shù)組也必須要有確定的類型。元素類型不同的兩個數(shù)組被認(rèn)為是兩種不同的類型检激,數(shù)組類型依照元素類型遵循多態(tài):如果NoisyDog是Dog的子類肴捉,那么元素是NoisyDog的數(shù)組就可以用在Dog元素?cái)?shù)組的地方。哈哈叔收,沒錯這個和可選值一樣也是泛型聲明齿穗,即Array<Element>,Element就是元素的類型饺律。
事實(shí)上數(shù)組類型同一限制窃页,可能沒有你想象的那么宴客。數(shù)組的元素必須是一種類型复濒,但是類型卻是十分領(lǐng)會的脖卖。通過選擇合適的數(shù)組類型你可以制作出實(shí)際上內(nèi)部有多種類型的數(shù)組,比如:
1巧颈、如果NoisyDog是Dog的子類畦木,那么Dog的數(shù)組就可以包含NoisyDog的元素。
2砸泛、如果Bird和Insect都采用了Flier協(xié)議馋劈,F(xiàn)lier為元素的數(shù)組就可以包含Bird或者Insect。
3晾嘶、AnyObject元素?cái)?shù)組就可以包含任何Swift的類的實(shí)例和橋接類的實(shí)例妓雾,比如Int,String垒迂、Dog械姻。
4、一種類型可能承載多個類型机断,比如枚舉類型就可以在關(guān)聯(lián)值中有Int楷拳、String等等類型。
聲明數(shù)組的類型既可以用泛型聲明:Array<Int>吏奸,也可以用語法糖聲明:[Int]欢揖。后者你會經(jīng)常使用到。
字面數(shù)組可以使用包含在方括號中的一系列被逗號分隔的元素來表示奋蔚,空數(shù)組的字面表示形式就是:[]她混。
數(shù)組的默認(rèn)構(gòu)造器init()烈钞,你可以在后面加一對空的圓括號來表示空數(shù)組:
如果引用量類型可以提前知道,那么該空數(shù)組可以推遲其類型坤按,因此你也可以這樣來創(chuàng)建空數(shù)組:
如果你用非空的字面元素來開始毯欣,那么你就不需要聲明數(shù)組的類型,因?yàn)镾wift會通過元素類型來推測出數(shù)組的類型臭脓。比如Swift會推測[1,2,3]為Int數(shù)組酗钞。如果數(shù)組包括父類和子類,那么Swift將會推測其為父類類型數(shù)組来累。甚至[1, "howdy"]這樣的數(shù)組也是可以的砚作,不過其類型是NSObject。然而在某些情況下嘹锁,即使你用字面量來聲明偎巢,你最好也現(xiàn)將引用量的類型顯式聲明:
數(shù)組也有參數(shù)是序列的構(gòu)造器,這就說明如果是序列類型兼耀,你就可以將它分開來充當(dāng)數(shù)組的元素。比如:
1求冷、Array(1...3)就能產(chǎn)生Int類型的數(shù)組[1,2,3]瘤运。
2、Array("hey".character)就會產(chǎn)生["h", "e","y"]匠题。
3拯坟、Array(d) 其中d是字典,就會產(chǎn)生key-value對的元組類型數(shù)組韭山。
還有一種構(gòu)造器 init(count:repeatValue:)郁季,可以用來初始化重復(fù)值。比如我要初始化一百個nil值在String钱磅?數(shù)組中梦裂。
let strings : [String?] = Array(count:100, repeatedValue: nil)
這是你在Swift中能得到的最接近于缺失數(shù)組的方法:你有100個空位可以放對象。
數(shù)組轉(zhuǎn)型和類型檢查:
當(dāng)你將一個數(shù)組分配盖淡、傳遞以及轉(zhuǎn)型到另一個數(shù)組的時(shí)候年柠,你是在每個元素的層面上去操作的:
這段代碼事實(shí)上是簡寫:將Int類型的數(shù)組賦給Int?類型數(shù)組褪迟,實(shí)際上是冗恨,每一個原數(shù)組中的元素都要進(jìn)行封包。事實(shí)上是這樣的情況:
類似地味赃,假如NoisyDog是Dog的子類掀抹,下面的代碼是合法的:
在第三行,我們建立了一個Dog數(shù)組心俗。第四行我們將Dog數(shù)組轉(zhuǎn)型為NoisyDog數(shù)組傲武,這就意味著我們將每個元素分別轉(zhuǎn)為NoisyDog類。
你可以用is運(yùn)算符測試元素類型來測試數(shù)組的類型:
如果每個元素均為NoisyDog,那么結(jié)果就是True谱轨。
同樣的戒幔,as?運(yùn)算符將把一個數(shù)組轉(zhuǎn)為包在可選值中的數(shù)組土童,如果無法下行轉(zhuǎn)換诗茎,結(jié)果將是nil。
數(shù)組轉(zhuǎn)型的目的和其他類型的轉(zhuǎn)型是類似的——你可以發(fā)送合適的消息給轉(zhuǎn)型后的數(shù)組献汗。如果NoisyDog聲明了Dog類沒有的方法敢订,你就不能向Dog類型的數(shù)組發(fā)送該方法。這樣你就需要將元素轉(zhuǎn)型為NoisyDog罢吃,然后編譯器才會讓你去進(jìn)行發(fā)送方法消息楚午。你既可以將其中的元素進(jìn)行轉(zhuǎn)型,也可以將整個數(shù)組進(jìn)行轉(zhuǎn)型尿招。
數(shù)組的比較:
如果兩個數(shù)組元素?cái)?shù)一樣且全部相等的話矾柜,那么就是相等的。
數(shù)組是值類型:
由于數(shù)組是結(jié)構(gòu)體就谜,所以其不是引用類型怪蔑,而是值類型。這就意味著丧荐,每一次數(shù)組被分配到變量或者作為函數(shù)參數(shù)缆瓣,它都會被復(fù)制一份。然而我不是在暗示這種復(fù)制的代價(jià)很大虹统。如果數(shù)組的引用是一個常量弓坞,那么顯然復(fù)制就不是必要的了,甚至從其他數(shù)組產(chǎn)生新數(shù)組的操作或者轉(zhuǎn)變數(shù)組的操作已經(jīng)是非常高效的了车荔。
你只需相信Swift的設(shè)計(jì)者已經(jīng)考慮過這個問題渡冻,而且在后臺處理數(shù)組是十分高效的。
雖然數(shù)組本身是值類型忧便,但是其元素是引用類型的還是按照引用類型來對待菩帝。特別是類的實(shí)例為元素的數(shù)組,如果被多個變量引用茬腿。那么就會產(chǎn)生多個引用這一個相同的實(shí)例呼奢。
數(shù)組下標(biāo):
數(shù)組結(jié)構(gòu)體利用下標(biāo)方法允許通過在引用變量后面添加包含值的方括號來取出元素。值可以是Int比如arr[1] 就是取出arr數(shù)組的第二個值切平。值還可以是Int的范圍握础,比如,arr[1...2]就是去取出第二個和第三個值悴品,嚴(yán)格的說禀综,這會產(chǎn)生叫做ArraySlice的東西简烘,其非常類似于Array,比如你可以用和數(shù)組一樣的下標(biāo)來取出ArraySlice的元素定枷;而且它也可以用在數(shù)組能用的地方孤澎。一般地,你就把他當(dāng)做是數(shù)組就可以了欠窒。
如果數(shù)組的引用是可變的(即var覆旭,而不是let),那么下標(biāo)的表達(dá)方法也可以用來被分配值岖妄。這會改變那個被下標(biāo)表達(dá)元素的值型将,被分配的值必須是與數(shù)組元素的類型一致。
如果下標(biāo)是一段區(qū)間荐虐,那么賦的值就必須是一個數(shù)組七兜,這有可能改變數(shù)組的長度:
下標(biāo)超過應(yīng)有的范圍就會引起運(yùn)行錯誤。
嵌套數(shù)組:
數(shù)組的元素是數(shù)組是合法的福扬。比如:
它是Int類型數(shù)組的數(shù)組腕铸。它的類型聲明是[[Int]]。(沒有規(guī)定說铛碑,內(nèi)部的數(shù)組必須是相同長度狠裹,上面只是為可了便于表達(dá))
為了得到內(nèi)部的數(shù)組元素,你可以使用下標(biāo)鏈:
如果外部數(shù)組的引用是可變的亚茬,你還可以進(jìn)行寫入:
你可以用其他方法改編內(nèi)部數(shù)組,比如你可以為它添加新的元素浓恳。
基本數(shù)組屬性和方法:
數(shù)組是一個集合(采用CollectionType協(xié)議)刹缝,而集合又是一個序列(采用SequenceType協(xié)議)。如果這些項(xiàng)有熟悉的情景颈将,如同String的characters梢夯。從這個方面來看,它與字符序列是很像的晴圾。
作為集合颂砸,數(shù)組的count只讀屬性表示元素的個數(shù)。當(dāng)count為0時(shí)候死姚,isEmpty屬性就是true人乓。
數(shù)組的first和last只讀屬性返回了它的第一個和最后一個元素,但是它們均被可選值包裹都毒,因?yàn)閿?shù)組有可能為空色罚,此時(shí)它們的值就是nil。這是在Swift中比較少見的雙重可選的情況账劲,比如戳护,當(dāng)你聲明一個類型為Int金抡?的數(shù)組的時(shí)候,此時(shí)如果為nil腌且,那么就是Int梗肝??铺董。
數(shù)組的最大下標(biāo)比count要少1巫击,有時(shí)你需要引用count來計(jì)算得出下標(biāo)是多少。比如你可以這樣來得到數(shù)組的后兩位柄粹,
Swift不允許你使用負(fù)數(shù)作為這種計(jì)算的捷徑喘鸟,而另一方面,如果你想要得出倒數(shù)幾位元素驻右,不妨使用suffix方法:
對于suffix和prefix方法什黑,都允許范圍超出:
通過前綴的個數(shù)多少來取出元素跪者,還可以用前綴的序數(shù)來表示取出元素:
數(shù)組的starIndex屬性是0廷蓉,endIndex屬性則是count的值。此外问词,indices屬性是以starIndex和endIndex為端點(diǎn)的半開區(qū)間森爽。也就是可以取出全部元素的范圍恨豁。如果你的數(shù)組的引用是可變的,你可以改變startIndex和endIndex來獲得新的區(qū)間爬迟。
indexOf方法會返回某個元素第一次出現(xiàn)的下標(biāo)橘蜜,要注意此值是可選值。如果該數(shù)組的元素是可比較相等的付呕,那么就可以用==來識別是不是要找的元素计福。
即使數(shù)組不是可比較相等的元素,你也是可以用自己的函數(shù)(用元素為參數(shù)徽职,返回bool值)來比較象颖。
作為序列,數(shù)組還有contains方法來驗(yàn)證它是否包含某個元素姆钉,同樣如果元素是可等的说订,你也可以用==運(yùn)算符,或者你可以提供自己的函數(shù)(參數(shù)為元素類型潮瓶,返回值為Bool)陶冷。
starWith方法則可以用來檢驗(yàn)一個數(shù)組的開始元素是不是與給定的序列符合,或者你也可以用==運(yùn)算符毯辅,或者你可以提供自己的函數(shù)(參數(shù)為元素類型埃叭,返回值為Bool):
elementsEqual方法則從序列的一般原則比較數(shù)組是否相同:兩個序列必須等長,而且每個元素相等悉罕。你也可以用==運(yùn)算符赤屋,或者你可以提供自己的函數(shù)(參數(shù)為元素類型立镶,返回值為Bool)。
minElement和maxElement返回最小或者最大的元素类早,同樣會被包在可選值中以防為空數(shù)組媚媒。如果元素可比,你也可以用<運(yùn)算符涩僻,或者你可以提供自己的函數(shù)(參數(shù)為元素類型缭召,返回值為Bool)。第三行是驗(yàn)證是否絕對值較小的數(shù)是兩個中的前者逆日。
如果數(shù)組的引用是可變的嵌巷,append和appendContentsOf這兩個實(shí)例方法都可以在數(shù)組末尾添加新元素。兩者的差別是室抽,append參數(shù)只是元素類型的單個值搪哪,而appendContentsOf則需要一個序列作為參數(shù)。比如:
+運(yùn)算符被重載為類似于appendContentsOf(不是append)坪圾。當(dāng)+前的運(yùn)算元是數(shù)組時(shí)晓折,它不會產(chǎn)生新的數(shù)組,所以即使引用的數(shù)組是常量也可以用兽泄。如果引用是變量漓概,就可以用+=來代替:
如果數(shù)組的引用量是可變的,實(shí)例方法insert(atIndex:)將單個元素插入到所給的下標(biāo)處病梢。如果要一次插入多個元素胃珍,可以使用insertContentsOf(at:)方法。
如果數(shù)組的引用量是可變的蜓陌,實(shí)例方法removeAtIndex可以將該下標(biāo)的元素移除觅彰,實(shí)例方法removeLast則會移除最后一個元素,removeFirst則會移除第一個元素护奈。這些方法也會將移除的元素返回缔莲,如果你不需要返回值哥纫,就不用理他們了霉旗。這些值不會被包在可選值里面,并且如果越界會引起崩潰蛀骇。removeLast還可以引入Int參數(shù)厌秒,來移除多個值,但是不會返回值擅憔,而且如果越界會引起崩潰鸵闪。
另一方面,popFirst和poplast將會返回可選值暑诸,所以即使是空數(shù)組也是安全的蚌讼。如果引用量是不可變的辟灰,你可以用dropFirst和dropLast來返回改變了的數(shù)組(確切的說是ArraySlice)。
實(shí)例方法joinWithSeparator以嵌套數(shù)組開頭篡石,它會取出單獨(dú)的數(shù)組元素芥喇,然后將參數(shù)數(shù)組插入到原數(shù)組元素之間。最后的結(jié)果就是被分割的數(shù)組凰萨,即JoinSeparater继控,最后在強(qiáng)制轉(zhuǎn)換成數(shù)組:
調(diào)用JoinWithSeparater,以空數(shù)組為參數(shù)可以“夷平”數(shù)組:
還有專門的實(shí)例方法flatten胖眷,它會返回JoinSeparater,然后在強(qiáng)制轉(zhuǎn)換為數(shù)組武通。
reverse實(shí)例方法會產(chǎn)生新的數(shù)組,其元素是倒過來的珊搀。
sortInplace和sort分別能將原始數(shù)組整理順序冶忱,和產(chǎn)生新的數(shù)組。同樣你有兩個選擇食棕,若果是可比較的就可以用<運(yùn)算符朗和,或者提供一個函數(shù)接受兩個參數(shù)并返回一個bool值,
在最后一行簿晓,我提供了一個匿名函數(shù)眶拉,或者你可以傳遞一個已經(jīng)聲明了的函數(shù)。在Swift中憔儿,比較運(yùn)算符就是它的函數(shù)名忆植,因此我可以更簡潔地這樣做:
split實(shí)例方法將數(shù)字分成嵌套數(shù)組,并可以傳遞測試谒臼,通過測試的將會被刪除朝刊。
數(shù)組枚舉和變形:
數(shù)組是序列,所以你可以將它枚舉化蜈缤,通過按順序檢查和操作每個元素拾氓。最簡單的就是for in循環(huán)。
或者還可以使用forEach實(shí)例方法底哥,它的參數(shù)是一個函數(shù)咙鞍,該函數(shù)的參數(shù)是數(shù)組的一個元素,沒有返回值趾徽。它其實(shí)就是與for in功能類似的函數(shù)续滋。
如果你還需要元素的下標(biāo),調(diào)用enumerate實(shí)例方法并在結(jié)果處循環(huán)孵奶,這樣每次循環(huán)得到的都是一個元組疲酌。
Swift還提供了,三個有效的數(shù)組變形實(shí)例方法。比如forEach朗恳,這些方法都會為你枚舉化數(shù)組湿颅,所以循環(huán)是隱含在方法調(diào)用中的,這會使你的代碼更加簡潔粥诫。
我們先從map實(shí)例方法開始肖爵,它會產(chǎn)生新數(shù)組,其中的新元素都是原數(shù)組的元素經(jīng)過我們所提供函數(shù)處理的結(jié)果臀脏。該函數(shù)的參數(shù)是數(shù)組元素的類型劝堪,然后返回的值是有可能為其他類型的值。Swift會自動推斷返回的數(shù)組元素的類型揉稚。
比如:可以為數(shù)組的每個元素都乘以2
下面這個例子是說map可以產(chǎn)生不同類型的數(shù)組:
實(shí)際開發(fā)中的例子:想要將UITableView中的一個section的cell放到同一個NSObject數(shù)組中去秒啦,sec是section的序號:
或者可以用更簡潔的map方法:
由于map實(shí)際上是CollectionType的實(shí)例方法,而區(qū)間(本身就是CollectionType)搀玖,所以可以進(jìn)一步簡寫:
filter實(shí)例方法也會產(chǎn)生一個新數(shù)組余境,然而其中的元素是經(jīng)過過濾的原數(shù)組元素,你可以提供具體的過濾函數(shù)灌诅,該函數(shù)接受一個元素類型值并返回一個bool值來驗(yàn)證是否要把該元素過濾掉芳来。
最后就是reduce實(shí)例方法,如果你接觸過LISP或者Scheme猜拾,你可能對其很熟悉即舌,否則你可能會覺得有點(diǎn)晦澀。這是一種將序列中所有元素都結(jié)合在一起的方法挎袜,它會產(chǎn)生唯一的值顽聂,該值不一定要與原數(shù)組元素的類型一樣。你需要提供的函數(shù)的值有兩個參數(shù)盯仪,第一個參數(shù)是結(jié)果類型的值紊搪,第二個參數(shù)是原數(shù)組元素的類型的值。每次迭代的結(jié)果會自動成為下一次的第一個參數(shù)全景,第二個參數(shù)則為下一個數(shù)組元素耀石。不過你需要提供第一次迭代時(shí)的第一個參數(shù)。最后結(jié)果就是該值和原數(shù)組元素的積累爸黄,并且其類型為該值的類型滞伟。
每一個參數(shù)對都會被加總在一起,然后作為下一次迭代的第一個參數(shù)馆纳,如果我們要的是全部數(shù)組元素的加總诗良,那么顯然這個值應(yīng)該是0汹桦。
再一次鲁驶,我們可以精簡這段代碼,因?yàn)?就是需要函數(shù)的名字:
在實(shí)際編程中舞骆,我相當(dāng)以來這幾個方法钥弯,經(jīng)常用兩個以上径荔,將他們嵌套或者鏈起來。這里有個例子脆霎,雖然看起來有點(diǎn)復(fù)雜总处,但是卻很好地解釋了如何使用Swift數(shù)組。
Swift Array&Oc NSArray:
當(dāng)你在進(jìn)行iOS編程的時(shí)候睛蛛,你會將Foundation框架import(或者可以導(dǎo)入U(xiǎn)IKit鹦马,此框架是已經(jīng)導(dǎo)入Foundation的),這樣Oc的NSArray也會被導(dǎo)入忆肾。Swift的Array橋接了Oc的NSArray荸频,但是這種橋接只有在數(shù)組類型是可以橋接的時(shí)才可以。Oc中能成為數(shù)組元素的條件比于Swift既是寬松的又是嚴(yán)格的客冈。NSArray的元素不一定都是一樣的類型旭从,另一方面Oc的數(shù)組元素必須是對象,這和Oc如何理解對象有關(guān)场仲。一般地和悦,如果它可以被向下轉(zhuǎn)型AnyObject,它就可以進(jìn)行橋接渠缕。這就是說要不它是類鸽素,要不它是特殊的可以進(jìn)行橋接的結(jié)構(gòu)體,如Int亦鳞、Double或String付鹿。
由此將Array傳遞給Oc是容易的。若你的Array的元素均可轉(zhuǎn)型AnyObject蚜迅,那么你可以直接進(jìn)行傳遞舵匾。通過分配或者作為函數(shù)的參數(shù)。
若要在Swift的Array中調(diào)用NSArray的方法谁不,你可以把它轉(zhuǎn)型為NSArray:
Swift的Array只要引用類型為var聲明就是可改變的坐梯,而NSArray無論是聲明什么都是不可以改變的。NSMutableArray才是正解刹帕,它是NSArray的子類吵血。你無法轉(zhuǎn)型,分配偷溺,傳遞一個Swift Array到NSMutableArray蹋辅。你需要先強(qiáng)制變換類型。最好方法就是直接調(diào)用NSMutableArray 構(gòu)造器 init(array:)挫掏,你可以直接將Array作為參數(shù)傳入侦另。
將NSMutableArray變?yōu)锳rray,則可以用轉(zhuǎn)型(Cast),如果你想要一個原始Swift類型的數(shù)組褒傅,你需要進(jìn)行兩次轉(zhuǎn)型:
如果一個Swift對象類型無法轉(zhuǎn)型為AnyObject弃锐,那么他就無法橋接至Oc,如果你試著將一個包含該類型實(shí)例的數(shù)組傳遞到需要NSArray的地方殿托,編譯器就會阻止你霹菊。在這種情況,你需要自己進(jìn)行橋接支竹。
比如有一個類型是CGPoint的Array旋廷,雖然在Swift中沒有任何問題,但是CGPoint是一個結(jié)構(gòu)體礼搁,在Oc中就無法使用柳洋,你也就不能將它放在NSArray中,如果你試著將它傳遞到需要NSArray的地方叹坦,就會有“[CGPoint]is not convertible to NSArray.”的錯誤報(bào)告熊镣。對策是:將每個CGPoint包進(jìn)一個NSValue中(Oc的對象類型,專門是非對象類型的容器)募书,這樣我們就可以有一個類型是NSValue的數(shù)組绪囱,并可以提交給OC。
另一種情況就是莹捡,可選的Swift數(shù)組鬼吵,Oc的集合類型是不能包含nil的,畢竟在Oc中nil就不是一個對象篮赢。所以你就不能把這種包含可選值的數(shù)組直接傳給需要NSArray的地方齿椅。在傳遞之前,你需要做點(diǎn)事:如果可選值包含值启泣,你可以先進(jìn)行解包涣脚,但是如果它不包含值,就沒法解包(nil)寥茫。對此遣蚀,你可以用Oc的NSNull類,它的唯一實(shí)例就是NSNull( )纱耻,可以代表nil芭梯。因此對于一個可選值包著字符串的數(shù)組就可以在不是nil的元素上進(jìn)行解包,在是nil的地方進(jìn)行NSNull()代替弄喘。
現(xiàn)在再來談?wù)凮c的NSArray到了Swift的情形玖喘,這樣方向的橋接是沒有任何問題的:NSArray可以很安全地變?yōu)锳rray。但是這樣轉(zhuǎn)變來的數(shù)組的類型是什么呢蘑志?要知道NSArray并沒有帶著其元素的類型信息累奈。因此默認(rèn)地NSArray將會變成類型是AnyObject的數(shù)組贬派。
不過幸運(yùn)的是,從Xcode7開始费尽,Oc改變了其NSArray, NSDictionary, or NSSet這三種可橋接至Swift的集合類型,使其變得能攜帶元素類型信息了(OC叫這個是lightweight generic)羊始。而在iOS9中旱幼,Cocoa API也修改為可以包含該信息。因此突委,絕大多數(shù)你從Cocoa接受的數(shù)組可以直接被識別類型柏卤。
比如,這種簡潔的代碼在以前是無法實(shí)現(xiàn)的:
其結(jié)果是一個包含字符串?dāng)?shù)組的數(shù)組匀油,分類列出了所有可用的字體缘缚。這在以前是不可能的,因?yàn)閁IFont的這兩種方法之前都是不可見的(他們以前會被認(rèn)為是AnyObject數(shù)組)敌蚜,而現(xiàn)在會被認(rèn)為是返回字符串?dāng)?shù)組的函數(shù)桥滨。
不過還是很有可能遇到從Oc接受AnyObject數(shù)組的情況的,如果真的遇到了弛车,你就需要將其轉(zhuǎn)型或者變?yōu)槟撤N特定的Swift類型齐媒。
下面就是一個Oc類包含一個返回NSArray的方法(沒有被類型標(biāo)記):
調(diào)用該方法并轉(zhuǎn)換結(jié)果,就需要將結(jié)果轉(zhuǎn)型為String的數(shù)組纷跛,
Oc的數(shù)組可以包含多種類型的對象喻括,不要強(qiáng)制將這種數(shù)組變?yōu)槠渲性夭荒苻D(zhuǎn)換的類型,否則就會崩潰贫奠。對于這種情況要對癥下藥唬血!