【问题标题】:SWIFT randomize array elements and button nameSWIFT 随机化数组元素和按钮名称
【发布时间】:2014-12-06 20:33:06
【问题描述】:

所以我面临两个问题:

我正在尝试从数组中获取随机元素。我找到了这种方式:

var cards = [1, 2, 3, 4, 5, 6, 7, 8, 9]

var randomCard = Int(arc4random_uniform(UInt32(cards.count)))

但是,我得到两个错误:

"Expected ',' separator" 
"Expected expression in list of expressions".

我做错了什么?

第二个问题如下:
我有UIButtons 命名为card1card2card3 等等。
有没有办法使用与randomCard 对应的按钮? 例如,图像有:

    UIImage(named: String (format: "card_%i_%i", y, b))

【问题讨论】:

  • 您的第一个代码示例对我有效,没有任何问题。那是你的实际代码吗?至于第二个问题,不,您无法从变量名称的String 版本中获取变量。相反,创建一个按钮数组并从中随机选择。 (或者使用之前选择的随机索引。)
  • 是的,这是我的实际代码。我刚刚创建了一个新项目,复制了上面的代码,我得到了完全相同的错误。我不知道可以创建一组按钮,谢谢 :)
  • 太好了,按钮数组也不起作用。在新项目中创建:@IBOutlet weak var button1: UIButton! @IBOutlet weak var button2: UIButton! @IBOutlet weak var button3: UIButton! var array: [UIButton] = [button1, button2, button3] 错误:“'ViewController.Type' 没有名为 'button1' 的成员”
  • 使用随机卡对应的按钮是什么意思?其他按钮不使用时要隐藏吗?
  • @user3822605 不,我想更改从数组中选取的数字的按钮的背景。比如随机数为2,则改变button2的背景,如果随机数为7,则改变button7的背景。

标签: arrays xcode button swift random


【解决方案1】:

我没有意识到您将这些作为存储属性声明提供。您遇到的问题是,在声明存储属性时,您无法访问同一类中的另一个属性 - self.cards 当时不存在。

执行此操作的几种方法是将第二个属性标记为lazy,因此在创建实例之前不会计算表达式,或者将其创建为计算属性,每次都会获取值已访问:

class ViewController: UIViewController {
    // stored property:
    var cardsArray = [1, 2, 3]
    // lazy property:
    lazy var cardCount: Int = self.cardsArray.count
    // computed property:
    var randomCard: Int {
        return Int(arc4random_uniform(UInt32(self.cards.count)))
    }
}

【讨论】:

  • 非常感谢!它解释了很多,我的代码终于可以正常工作了。按钮数组也很完美。
【解决方案2】:

您可以使用 if 语句来测试随机数是什么,然后根据它是哪个来更改按钮背景。例如,您可以这样做:

if randomCard == 1 {
//run some code
} else if randomCard == 2 {
//run some other code
}

以此类推,直到获得所有值。

【讨论】:

  • 是的,我知道,但是,如果一个人有例如,这是一个非常长的解决方案。 50张卡片。无论如何,我现在的主要问题是我不能真正使用 arc4random_uniform 因为我总是会遇到一些错误。连这么简单的代码都不行:class ViewController: UIViewController { var cardsArray = [1, 2, 3] var cardsLeft = cardsArray.count }我做错了什么?我的问题可能看起来很愚蠢,但我是 swift 的初学者,当这样简单的代码给你错误时,我真的没有动力......
  • 所有按钮都是以编程方式创建的吗?
  • 不,我在 Main.storyboard 中创建它们,然后当然我将它们与我的 ViewController 连接起来。但是我在之前的评论中给你的代码没有任何按钮,只有两个变量,而且它不起作用。它说“ViewController.Type”没有名为“cardsArray”的成员。
  • 我找到了一些解决方案:仅仅是我们不能在 ViewController 类中使用 count 或 arc4random 之类的函数吗?所以需要在 ViewController 类中创建一个函数,并且在这个函数内部可以使用 count、arc4random 等?
  • 好的,我明白了。很快就会回复。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2013-11-14
相关资源
最近更新 更多