Проверьте строку как действительный UUID в Swift

Учитывая поставленный StringКак я могу проверить, String действительный UUID в Swift?

Действительный UUID (насколько я знаю) может быть:

33041937-05b2-464a-98ad-3910cbe0d09e
3304193705b2464a98ad3910cbe0d09e

3 ответа

Решение

Вы могли бы использовать UUID

var uuid = UUID(uuidString: yourString)

Это вернет ноль, если yourString не является действительным UUID

Примечание: это подтверждает только первый случай, который вы представили, а не второй, но добавление тире самостоятельно - тривиально.

Следующее обновлено для Swift 4.0, чтобы определить, является ли строка допустимым UUID.

let uuidHyphens = "33041937-05b2-464a-98ad-3910cbe0d09e"
let uuidNoHyphens = "3304193705b2464a98ad3910cbe0d09e"

if UUID(uuidString: uuidHyphens) != nil {
    print("UUID string with hypens is valid") // Will be valid
} else {
    print("UUID string with hypens is not valid")
}

// In this scenario, the UUID will be nil,
if UUID(uuidString: uuidNoHyphens) != nil {
    print("UUID string with no hypens is valid")
} else {
    print("UUID string with no hypens is not valid") // Will not be valid
}

Строка, переданная в UUID init, должна содержать дефисы, в противном случае проверка завершится неудачно. Если вы ожидаете строки без переносов, то вы можете использовать подход, такой как описанный здесь, чтобы добавить переносы к строке, если она удовлетворяет длине 32.

Соответствующий раздел из документации Apple:

Создайте UUID из строки, такой как "E621E1F8-C36C-495A-93FC-0C247A3E6E5F".

Я написал расширение ниже, чтобы сделать строки UUID

      extension String {
  var uuid: String? {
    var string = self
    var index = string.index(string.startIndex, offsetBy: 8)
    for _ in 0..<4 {
      string.insert("-", at: index)
      index = string.index(index, offsetBy: 5)
    }
    // The init below is used to check the validity of the string returned.
    return UUID(uuidString: string)?.uuidString
  }
}
Другие вопросы по тегам