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