【问题标题】:How to get Integer from button title如何从按钮标题中获取整数
【发布时间】:2016-10-06 10:28:30
【问题描述】:

我有一个标有“3x3”的按钮,现在我想在按钮单击函数中创建一个值为“3”的 Int 变量。

我试过了

let newBoardSizeString = String.localizedStringWithFormat("\(sender.currentTitle?.characters.first)")
let newBoardSize = Int(newBoardSizeString)

我得到的字符串是这样的

"Optional(\"3\")"

我得到的 Int 是

nil

我只想要 3 个

【问题讨论】:

  • Int(newBoardSizeString)!
  • 为什么要从按钮标签创建 Int?
  • 因为我想调用另一个以 Int 作为参数的函数
  • 我的意思是,如果您知道它是 3,那么只需传递 3。如果按钮标签是动态设置的,则数字 3 应该来自其他地方,您应该从那里获取该值,而不是从按钮标签。
  • 先设置按钮标签(UI)然后从中获取数据不是一个好方法。您应该考虑先创建数据,然后使用该数据填充 UI。例如,创建一个数组 [3, 6, 4],然后使用字符串格式设置按钮标签。

标签: ios swift swift3


【解决方案1】:

这是XY problem

您问:“如何将按钮标签的第一个字符转换为 Int。”

真正的答案是“不要那样做”。让代码的逻辑依赖于显示信息是一个非常糟糕的主意。

一个简单的解决方案是使用按钮的 tag 属性,并在创建按钮时在 IB 中将 tag 值设置为 3:

let newBoardSize = sender.tag

请注意,您需要将您的 IBAction 设置为发送者为 UIButton 类型(更好的解决方案),或者将发送者转换为您的 IBAction 中的正确类。

另一种方法是为您的不同按钮(例如threeButtonfourButton)设置插座,然后在您的 IBAction 中,检查哪个按钮是发送者并使用 switch 语句来确定每个按钮的适当值:

func buttonTapped(sender: UIButton) {
  switch sender {
     case threeButton:
       //Use the value 3
     case fourButton
       //Use the value 4
   }
}

【讨论】:

  • 终于有人做出了应有的回答!
【解决方案2】:

 let newBoardSizeString = String.localizedStringWithFormat("\(sender.currentTitle?.characters.first!)")

【讨论】:

  • 虽然这段代码 sn-p 可以回答这个问题,但它没有提供任何上下文来解释如何或为什么。考虑添加一两句话来解释你的答案。
【解决方案3】:
let newBoardSizeString = String.localizedStringWithFormat("\(sender.currentTitle?.characters.first)")
if let unwrapped = Int(newBoardSizeString){
    let newBoardSize = unwrapped
}

【讨论】:

    【解决方案4】:

    这行得通。

    let newBoardSize = newBoardSizeString as! Int
    

    【讨论】:

      【解决方案5】:

      你试过了吗?

       Int(newBoardSizeString)!
      

      并确保在打开值之前处理 nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        • 2020-03-07
        相关资源
        最近更新 更多