仅从数组调用一次值

时间:2015-03-08 17:16:47

标签: ios swift

我是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()
    }
}

2 个答案:

答案 0 :(得分:1)

如果要从阵列中删除它,可以使用Array.removeAtIndex(index: Int) -> Element

删除索引并同时返回。

所以只需替换:

return factsArray[randomNumber]

使用:

return factsArray.removeAtIndex(randomNumber)

答案 1 :(得分:0)

@swift执行@Arbitur提到的数组factsArray必须声明为var,因为removeAtIndex是一种变异方法(一种更改self的方法方法体) - 如果你不想使用一个可变数组,你可以将一个私有变量声明为let和一个NSMutableSet(或者作为Swift 1.2 a var声明为{{ 1}})并向其添加每个随机数(Set<T>myMutableSet.addObject(45))。然后,如果集合包含元素(mySet.insert(45)),则可以轻松检查(复杂性O(1)表示只有1个测试的含义)。 然后你必须搜索一个随机数,直到它不是该集的一部分。最后你可以这样做(当不使用Swift 1.2时):

mySet.contains(32)