Swift:每次单击按钮时显示一个随机数组索引

标签 swift

我有一个 swift 类,它从文本文档中读取行并打印出第一行。之后,每次单击按钮时都会读出一行。

我想要的是第一次打印出随机行,然后在每次单击按钮后打印出随机行。

这是我目前所拥有的:

import Foundation
import UIKit

class InfoController: UIViewController {

// MARK: Properties
@IBOutlet weak var difficultylevel: UILabel!
var i:Int = 0


override func viewDidLoad() {
    super.viewDidLoad()

}

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

func readFile(){
    if let path = NSBundle.mainBundle().pathForResource("easymath", ofType: "txt"){
        var data = String(contentsOfFile:path, encoding: NSUTF8StringEncoding, error: nil)

        if let content = data {
            let myStrings = content.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())


            let randomIndex = Int(arc4random_uniform(UInt32(myStrings.count)))
            difficultylevel.text = myStrings[randomIndex]
        }
    }
}



@IBAction func difficultybutton(sender: UIButton) {

    difficultylevel.text = // TODO insert random index of "myStrings" array here

}
}

但是,我无法在单击按钮内的 TODO 部分访问 myStrings 数组。有关如何设置的任何帮助?

最佳答案

Swift 中的变量作用域仅限于函数的括号内。因此,要使 myStringsreadFile() 函数之外可用,您需要将其声明为类的属性:

@IBOutlet var difficultyLevel: UILabel? // BTW your IBOutlet should not be weak
var i: Int = 0
var myStrings: [String]?

既然你要反复使用随机函数,我们可以像这样抽象函数

func randomString() -> String? {
     if let strings = myStrings {
         let randomIndex = Int(arc4random_uniform(UInt32(myStrings.count)))
         return strings[randomIndex]
    }
    return nil
}

那么你的实例化就是这样

if let content = data {
    myStrings = content.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
    difficultyLevel.text = randomString()
}

然后,您的difficultybutton 函数将是(带有抽象的随机字符串函数)

// Changed the name for better readibility
@IBAction func difficultyButtonTapped(sender: UIButton) {
     difficultyLevel.text = randomString()
}

最后,没有任何代码调用 readFile 函数,因此您应该将它添加到可能的 viewDidLoad 函数中,正如@CharlesCaldwell 指出的那样

override func viewDidLoad() {
     super.viewDidLoad()
     readFile()
}

关于Swift:每次单击按钮时显示一个随机数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37439820/

相关文章:

swift - 快速重新滚动随机数

ios - 为什么在使用 JSONDecoder 时会出现 ‘Cannot get keyed decoding container -- found null value instead.’ 错误

ios - 如何在 Swift 中从 session 中捕获视频?

closures - animateWithDuration:animations:completion: 在 Swift 中

ios - 如何在 Swift 中从 Firebase 向数组附加过滤器数据

ios - 无法 swift 推断通用参数

ios - 删除所有核心数据数据

ios - Swift 5 安装测试真实设备时出现错误

arrays - 如何根据数值属性对对象数组进行正确排序

ios - 使用 swift 将 "gif"转换为视频