Как получить целое число из заголовка кнопки

#ios #swift #swift3

#iOS #swift #swift3

Вопрос:

У меня есть кнопка с надписью «3×3», теперь я хочу создать переменную Int со значением «3» в функции нажатия кнопки.

Я пробовал

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

Строка, которую я получаю, выглядит так

 "Optional("3")"
  

и Int, который я получаю, равен

 nil
  

Я хочу только 3

Комментарии:

1. Int(newBoardSizeString)!

2. Почему вы хотите создать Int из метки кнопки?

3. потому что я хочу вызвать другую функцию, которая имеет Int в качестве аргумента

4. Я имею в виду, если вы знаете, что это 3, тогда просто передайте 3. Если метка кнопки задается динамически, число 3 должно быть откуда-то еще, и вы должны взять это значение оттуда, а не из метки кнопки.

5. Это не очень хороший подход, чтобы сначала установить метку кнопки (пользовательский интерфейс), а затем получить от них данные. Вам следует сначала подумать о создании данных, а затем о заполнении пользовательского интерфейса этими данными. Например, создайте массив [3, 6, 4], а затем установите метки кнопок, используя строковый формат.

Ответ №1:

Это проблема XY.

Вы спрашиваете: «Как мне преобразовать первый символ моей метки кнопки в Int».

Реальный ответ: «Не делайте этого». Это очень плохая идея, чтобы логика вашего кода зависела от отображаемой информации.

Одним из простых решений является использование свойства tag вашей кнопки и установка значения тега равным 3 в IB при создании кнопки:

 let newBoardSize = sender.tag
  

Обратите внимание, что вам нужно либо настроить IBAction с отправителем типа UIButton (лучшее решение), либо привести sender к правильному классу в вашем IBAction.

Другой подход заключается в настройке выходов для разных кнопок (например threeButton , и fourButton ), а затем в вашем IBAction проверьте, какая кнопка является отправителем, и используйте оператор switch, чтобы определить соответствующее значение для каждой кнопки:

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

Комментарии:

1. Наконец, кто-то дает ответ, каким и должны быть ответы!

Ответ №2:

!

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

Комментарии:

1. Хотя этот фрагмент кода может ответить на вопрос, он не предоставляет никакого контекста для объяснения того, как и почему. Подумайте о том, чтобы добавить одно или два предложения, чтобы объяснить свой ответ.

Ответ №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 , прежде чем разворачивать значение.