Swift 4
let RISTRICTED_CHARACTERS = "'*=+[]\\|;:'\",<>/?%"
Метод делегата UITextField:
func textField(_ textField: UITextField, shouldChangeCharactersIn _: NSRange, replacementString string: String) -> Bool {
let set = CharacterSet(charactersIn: RISTRICTED_CHARACTERS)
let inverted = set.inverted
let filtered = string.components(separatedBy: inverted).joined(separator: "")
return filtered != string
}
Стандартные контейнеры определяют size_type
как typedef для Allocator :: size_type
(Allocator - это параметр шаблона), который для std: : allocator
обычно определяется как size_t
(или совместимый тип). Так что для стандартного случая они одинаковы.
Однако, если вы используете настраиваемый распределитель, можно использовать другой базовый тип. Так что container :: size_type
предпочтительнее для максимальной универсальности.
Для std :: [w] string
, std :: [w] string :: size_type
равно std :: allocator
, что равно std :: size_t
. Для других контейнеров это определенный реализацией целочисленный тип без знака.
Иногда полезно иметь точный тип, поэтому, например, кто-то знает, где этот тип завершается (например, до UINT_MAX
), чтобы можно было использовать это. Или для шаблонов где вам действительно нужно передать два идентичных типа в шаблоны функций / классов.
Часто я нахожу, что использую size_t
для краткости или итераторы в любом случае. В общем коде, поскольку вы обычно не знаете, с каким экземпляром контейнера используется ваш шаблон и какого размера эти контейнеры, вам придется использовать typedef Container :: size_type
, если вам нужно хранить контейнеры. размер.
size_t
is defined as the type used for the size of an object and is platform dependent.container::size_type
is the type that is used for the number of elements in the container and is container dependent.All std
containers use size_t
as the size_type
, but each independent library vendor chooses a type that it finds appropriate for its container.
If you look at qt, you'll find that the size_type
of Qt containers is version dependent. In Qt3 it was unsigned int
and in Qt4 it was changed to int
.