В Swift 2 типы указателей соответствуют NilLiteralConvertible
, что позволяет необязательному типу указателя представлять нулевую ошибку тер. Поэтому, когда вы сделали
UnsafeMutablePointer<CFRange>(nil)
компилятор фактически используя init(_ other: COpaquePointer)
Инициализатора из UnsafeMutablePointer
как COpaquePointer
является NilLiteralConvertible
и, следовательно, может представлять собой нулевой указатель.
Однако в Swift 3 (SE-0055) типы указателей больше не соответствуют ExpressibleByNilLiteral
. Вместо того, чтобы позволить необязательному типу указателя представлять нулевой указатель, теперь это делается просто с помощью опций, где nil
означает нулевой указатель.
Таким образом, вы можете просто передать nil
непосредственно в параметре CFStringTransform
range
, как он ожидает UnsafeMutablePointer<CFRange>!
:
CFStringTransform(theCFMutableString, nil, kCFStringTransformToUnicodeName, false)
это все работает для вас сейчас? Если вы все еще видите проблемы с последней версией, сообщите об ошибке в [BonMot] (https://github.com/Raizlabs/BonMot/issues). Однако, судя по дате вашего сообщения, я предполагаю, что вы столкнулись с этим в BonSpecialGenerator.swift, который позже был обновлен до Swift 3 и вообще не существует с BonMot 4.0. –