1. 程式人生 > >Swift3.0 字串

Swift3.0 字串

其實很喜歡學習到新東西時候的那種滿足感,雖然是如此的初級,就像之前學習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

所以

去前後的空格

去空格用到一個 StringtrimmingCharacters(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
}