2015-06-15 158 views
0

我用下面的函數從數組中檢索素不相識的人:使用功能斯威夫特

func getRandomPerson() -> String{ 

if(personArray.isEmpty){ 
    return "" 
} else { 
    var tempArray: [String] = [] 
    for person in personArray{ 
     tempArray += [person.getName()] 
    } 
    var unsignedArrayCount = UInt32(tempArray.count) 
    var unsignedRandomNumber = arc4random_uniform(unsignedArrayCount) 
    var randomNumber = Int(unsignedRandomNumber) 
    if tempArray.isEmpty { 
     return "" 
    } else { 
     return tempArray[randomNumber] 
    } 
} 
} 

我想用這個函數的字符串數組裏面,像這樣:

var theDares: [String] = ["Dare1 \(getRandomPerson())", "Dare2", "Dare3", "Dare4", "Dare5"] 

但是,當我使用的功能,它只運行一次功能。在這種情況下,您每次使用「Dare1」時都可以使該功能運行。

在此先感謝

回答

2

我想你是問,如果你可以設置你的陣列所以每次在索引0抓取物體,它重新構建價值存在。

簡短的回答是否定的。您的代碼正在創建一個字符串數組,並且索引0處的項目是使用函數調用構建的。

但是,可以使自定義類實現下標運算符。您可以創建一個看起來像一個數組的自定義對象,並允許您使用Int索引對其進行索引。爲了響應索引操作符,您可以運行構建並返回隨機字符串的自定義代碼。

因爲它聽起來像你是一個開始創建自定義類的程序員,實現下標操作符可能超出了你當前的能力。

+0

謝謝!我會研究這個! :) – Heinevolder

1

嘗試這樣的:

let personArray = ["John", "Steve", "Tim"] 

var randomPerson: String { 
    return personArray.isEmpty ? "" : personArray[Int(arc4random_uniform(UInt32(personArray.count)))] 
} 


println(randomPerson) // "Steve"