標籤:ios8 swift paul hegarty string assertions
處理字串的痛點是字串的索引和建立字串等其他的問題以及如何建立一個字串的子串。
字串是由Unicode組成的,你不要把Unicode組成的字串的子串看做Unicode字元,而是把它們拆分成Unicode字素,所以我們不能像數組中那樣索引,因為會遇到有的字素是由多個字元組成,這樣會把一個完整語義的字素拆成了兩個字元從而改變了原意。所以字串是由另外的一個類型來索引的,這種類型就是String.index。注意advance這是個函數,並不是方法,它會跳過整個字素而不是一個字元。如樣本中所示index會輸出“l”。
另外字串中的splice和數組中的splice很像,將一個字串合并到另一個字串當中。樣本中s的值現在變成了heabcllo。
最後我們使用range可以得到s的子串,在截取起始終止位置的時候不能直接用Int,依舊必須採用advance的辦法,如樣本中最後截取的子串為eabcl。
還記得之前在計算機項目中使用的rangeOfString方法麼,它會返回一個Optional類型的Range。我們可以利用整個方法來擷取字串中的子串,比如第一個樣本擷取一個浮點數的小數部分。或者把這部分替換或者刪除,但前提都是擷取你需要的range。
String還有些其他的方法,都是基於字串的索引的,有我們之前見過的description、join方法。值得注意的是字串操作中只有toInt而沒有toDouble,因為Double的結構比較複雜,你需要指定一些細節諸如小數點後面有多少位等等,需要額外的參數。但是Int就不存在,當然toInt的返回值是可選型,如果你讓“hello”調用toInt,那麼很明顯會返回一個nil。
還有一些通過初始化實作類別型轉換的方法。比較有趣的是你可以通過初始化方法實現數組和字串的互轉,不過要注意轉換後的數組的元素是字串中的Unicode字元。
我們也可以通過\()調用的方法把浮點數轉換成字串。
最後再講一個debug相關的方法。Assertions
assert這個方法接受一個閉包作為其第一個參數,第二個參數是一個字串,加入第一個閉包返回的是一個false,那麼這個字串就會被列印到中控台上。
如樣本中我們希望某個函數不為空白,如果為空白會把程式搞崩潰,使用assert,當這個函數為空白的時候,會把後面的字串列印到中控台,這樣你就知道哪裡出問題了。
【我們都愛Paul Hegarty】斯坦福IOS8公開課個人筆記8 String、Type Conversion、Assertions