Проверка правильности значения массива в Swift 4

При использовании раскадровки для управления анимацией убедитесь, что для второго параметра задано значение true, чтобы настроить анимацию как управляемую:

public void Begin(
    FrameworkContentElement containingObject,
    **bool isControllable**
)
-2
задан rmaddy 20 March 2019 в 03:35
поделиться

2 ответа

Чтобы проверить, является ли объект числом (Int в вашем случае), вы можете сделать две вещи:

  1. Проверка типа через is или as? [1130 ]

    • Это проверяет только тип, а не содержимое

      let isNumberType = "1" is Int
      print(isNumberType) //false because "1" is of type String
      
  2. Создание Int через его инициализатор [1132 ]

    • Возвращает Int?, потому что он может потерпеть неудачу, поэтому проверьте далее != nil

      let something = "1"
      let isNumber = Int(something) != nil
      print(isNumber) //true because "1" can be made into an Int
      
<час>

ПРИМЕЧАНИЕ. Согласно вашему примеру, вы проверяете только четные элементы, поэтому мы будем использовать stride(from:to:by:)

Решение № 1:

Предполагая, что у вас есть массив String с, мы можно использовать инициализатор Int, чтобы проверить, может ли элемент string быть числом, например:

func check(expression: [String]) -> Bool {
    for idx in stride(from: 0, to: expression.count, by: 2) {
        let isNumeric = Int(expression[idx]) != nil
        if isNumeric == false {
            return false
        }
    }

    return true
}

check(expression: ["1", "A", "2", "B", "3", "C"]) //true
check(expression: ["1", "A", "2", "B", "E", "C"]) //false

Решение №2:

Предполагая, что ваш массив имеет наберите [Any], и вы хотите напечатать, проверьте, чтобы альтернативные элементы были Int, затем используйте is, например, так:

func check(expression: [Any]) -> Bool {
    for idx in stride(from: 0, to: expression.count, by: 2) {
        let isNumeric = expression[idx] is Int
        if isNumeric == false {
            return false
        }
    }

    return true
}

check(expression: [1, "A", 2, "B", 3, "C"])   //true
check(expression: [1, "A", 2, "B", "3", "C"]) //false

С [Any] дело в том, что его элементы не могут быть подается непосредственно в инициализатор Int, не внося его в o приемлемый тип.
Так что в этом примере, для простоты, мы просто проверяем, принадлежит ли объект точно типу Int или нет.
Поэтому я сомневаюсь, что это соответствует вашему требованию.

0
ответ дан staticVoidMan 20 March 2019 в 03:35
поделиться

Попробуйте это:

var str = "1234456";
let scanner = Scanner(string: str);
let isNumeric = scanner.scanInt(nil) && scanner.isAtEnd
if !isNumeric {
   print("not numeric")
} else {
   print("is numeric")
}

В целом, если вы просто хотите проверить, что данная строка является анализируемым целым числом, я рекомендую попробовать:

var expressions = ["1234456","abcd"];
for str in expressions {
    if let isNumeric = Int(str) {
        print("is numeric")
    } else {
        print("not numeric")
    }
}
0
ответ дан Amir.n3t 20 March 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: