В документах говорится: «Когда функция объявлена как принимающая аргумент UnsafeMutablePointer, она может принимать любое из следующего... Выражение входа-выхода, операндом которого является сохраненное значение lvalue типа Type, которое передается как адрес lvalue. ." Я могу скопировать пример и продемонстрировать это.
func takesAMutablePointer<T>(x: UnsafeMutablePointer<T>) -> UnsafeMutablePointer<T>
{
return x
}
func useAMutablePointer()
{
var legInt :UInt32 = 42
var legIntArray: [UInt32] = [legInt]
var legIntPtr: UnsafeMutablePointer<UInt32>
legIntPtr = takesAMutablePointer(&legInt)
legIntPtr = takesAMutablePointer(&legIntArray)
legIntPtr = UnsafeMutablePointer(&legInt) //Compile error!
legIntPtr = UnsafeMutablePointer(&legIntArray) //Compile error!
}
Xcode показывает, что UnsafeMutablePointer имеет следующий инициализатор:
init<U>(_ from: UnsafeMutablePointer<U>)
, но когда я пытаюсь использовать его как свою функцию, ошибка компилятора Cannot find an initializer for type 'UnsafeMutablePointer<T>' that accepts an argument list of type '(inout UInt32)'
Итак,
- Какой прямой способ получить
UnsafeMutablePointer<UInt32>
для legInt? - Почему я не могу использовать инициализатор, как ожидалось?
Спасибо!