Swift3.0 字串
阿新 • • 發佈:2019-02-11
其實很喜歡學習到新東西時候的那種滿足感,雖然是如此的初級,就像之前學習HTML的時候一樣,真好
舉個例子來說明吧,剛才用到的一個例子
把字串
var str = "Twigs x3, Rocks x3, Rope x2"
轉化成
[
(name: "Twigs", count: "3"),
(name: "Rocks", count: "3"),
(name: "Rope", count: "2"),
]
這個樣子的
首先,分割
這個字串是以 ,
為間隔的,所以我們就以它為分割
//最近發現一個正規的新方法,這下面是以前初學Swift的時候用的
var strArr = str.components(separatedBy: "_" )
// 有兩種方法 .components(separatedBy: String) .components(separatedBy: CharacterSets)
// OLD ONE
var strArr = str.characters.split(separator: ",").map( {String($0)} )
// 前面不需要多說 characters.split(separator: ",") 就是以 `,` 進行分割,返回陣列,此時返回的並不是String
// 後面的 map({}) 是`陣列`的一個轉化函式,接收函式作為引數, $0 表示 函式的第一個引數。
此時的 strArr
是這樣的,後兩個前面都有空格
Twigs x3
Rocks x3
Rope x2
所以
去前後的空格
去空格用到一個 String
的 trimmingCharacters(in: CharacterSet)
方法,接收一個字元集合,這裡我們需要含有空格的 String.whitespaces
set
for tempStr in strArr{
tempArr = tempStr.trimmingCharacters(in: String.whitespaces).characters.split(separator: " ").map({String($0)})
// 我就不再冗述了,上面就是獲取去掉空格的字串之後又分割一遍
// 此時還在迴圈內,tempArr 裡面是這樣的 ["Twigs" ,"x3"]
// 此時,需要把第二個的 `x` 給去掉
}
remove(at: String.Index)
這個,我還是在下面說吧,.remove 接收字元index 然後去掉 這個位置的字元,返回 的是 去掉這個字元後的字串
所以,接著上面的我們先等到 x
的位置
let index = tempArr[1].characters.indexof("x")
// 然後去掉這個位置的 字元
tempArr[1].remove(at: index)
完整的程式碼是這樣的
func getCraftMaterials(crafting: String) -> [(name: String, count: String)]{
let cc = crafting.characters.split(separator: ",").map({String($0)})
var arr:[(name: String, count: String)] = []
for tempStr in cc{
let tempArr = tempStr.trimmingCharacters(in: CharacterSet.whitespaces).characters.split(separator: " ").map({String($0)})
var count = tempArr[1]
if let xPosition = count.characters.index(of: "x"){
count.remove(at: xPosition)
}
arr.append((tempArr[0],count))
}
return arr
}