Как вы знаете, Float
имеет только 24-битовое значение, поэтому 32-битное значение 0xFFFFFFFF будет усечено. Итак, Swift предупреждает вас, что Float
не может точно представлять значение 0xFFFFFFFF
.
Краткое исправление было бы примерно таким:
let randomValue: CGFloat = CGFloat(Float(arc4random()) / Float(0xFFFFFFFF))
При использовании Float.init
в явном виде Swift не будет генерировать такие предупреждения.
Но предпочтительным способом было бы использовать метод random(in:)
, как предложено в ответе Мэтта:
return CGFloat(Float.random(in: from...to))
или просто:
return CGFloat.random(in: from...to)
aho-corasick дерево поиска отвечало бы всем требованиям. Aho-Corasick очень хорошая статья об этом виде вещи Попытки и реализация, используемая в Эволюции для замены regex ищущий Etrie
Править: Чтобы сделать целое сопоставление строк, можно добавить начало и конечные состояния привязки при сканировании много данных строки, Вы могли добавить новую строку, чтобы начаться и закончиться. Вы могли также удалить часть, где она добавляет крест, связывающийся для частичного соответствия, начинающего другой матч, это также позволяет более быстрое исключение.
Другим алгоритмом для проверки членство в строковом наборе является CritBit. Это не имеет Regex, но этого простым и тестирует полные строки.