2015-03-08 24 views
1

我是一个初学者,在swift和一般的编程中,所以我会喜欢一点帮助!一旦调用了一个值,我该如何使它不能被再次调用?只从数组中调用一个值

这是我的函数,它调用一个随机值。

func randomFact() -> String { 
    var unsignedArrayCount = UInt32(factsArray.count) 
    var unsignedRandomNumber = arc4random_uniform(unsignedArrayCount) 
    var randomNumber = Int(unsignedRandomNumber) 

    return factsArray[randomNumber] 
} 

这里是我的viewDidLoad.swift

class ViewController: UIViewController { 

    @IBOutlet weak var funFactLabel: UILabel! 

    let factBook = FactBook() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     funFactLabel.text = factBook.randomFact() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func showFunFact() { 
     funFactLabel.text = factBook.randomFact() 
    } 
} 

回答

1

如果你想从数组中删除它,你可以使用Array.removeAtIndex(index: Int) -> Element

它删除索引,并在同一时间返回。

所以只需更换:

return factsArray[randomNumber] 

有了:

return factsArray.removeAtIndex(randomNumber) 
+0

我收到此错误类型的'永恒价值“[字符串]”不仅具有变异名称的成员“removeAtIndex'' – swift 2015-03-08 17:58:50

+0

告诉我你怎样声明事实上,它需要一个var不允许 – Arbitur 2015-03-08 18:23:26

+0

'struct FactBook var factsArray = [“我现在可能有20个值”,“但它对很多字符”] – swift 2015-03-08 18:58:53

0

@swift做什么@Arbitur提到你的阵列factsArray都将被声明为varremoveAtIndex是不同诱变方法(一方法在方法体中更改self) - 如果您不想使用可变数组,则可以声明私有变量为letNSMutableSet(或自Swift 1开始.2 a var as Set<T>)并向其添加每个随机数(myMutableSet.addObject(45)mySet.insert(45))。然后,如果集合包含元素(mySet.contains(32)),则可以轻松检查(复杂度为O(1)什么意思是您只有1个测试)。 然后,你必须搜索一个随机数,直到它不是集合的一部分。最后,你可以做到这一点(不使用雨燕1.2时):

let set = NSMutableSet() 
func randomFact() -> String { 
    let unsignedArrayCount = UInt32(factsArray.count) 
    var unsignedRandomNumber: UInt32 
    do { 
     unsignedRandomNumber = arc4random_uniform(unsignedArrayCount) 
    } while set.containsObject(unsignedRandomNumber) 
    set.addObject(unsignedRandomNumber) 
    let randomNumber = Int(unsignedRandomNumber) 
    return factsArray[randomNumber] 
} 
相关问题