(то есть, если вы согласны, что указатель указывает на временное значение - то есть вы не полагаетесь на то, что значение указателя является стабильным или уникальным, как, например, если бы его использовали, например, как ключ связанного объекта)

ся, что Xcode 9.3 исправляетодна проблема у меня была, но в Swift 4.1 вторая половина этого кода все еще не компилируется:

var obj: SomeClass!    ; class SomeClass {}

func inoutFunc(_: inout SomeClass?) {}
inoutFunc(&obj)     // works

func pointerFunc(_: UnsafeMutablePointer<SomeClass?>) {}
pointerFunc(&obj)  // <-- COMPILER ERROR

Призыв кinoutFunc сейчас хорошо, но звонокpointerFunc по-прежнему выдает ошибку:

Невозможно вызвать 'pointerFunc' со списком аргументов типа '(inout SomeClass!)'

Или в оригинальном контексте:

Не удается передать неизменное значение типа 'ActualClass?' в качестве аргумента

Похоже на мою проблему Swift 4.0 (гдеinoutFunc тоже не компилировался) если я изменю объявление наvar obj: SomeClass? затем второй вызов функции компилируется без жалоб.

Является ли это еще одной давней ошибкой Swift, связанной с неявно развернутыми опциями, илиUnsafeMutablePointer Ситуация не должна работать какinout версия сейчас делает? Есть ли относительно чистый обходной путь?

Фон:

В фактическом кодеpointerFunc call - это каркасная функция Apple, которая либо инициализирует экземпляр, либо возвращает состояние ошибки.

Так как я ужеguard AppleFrameworkInitializer(&obj) == noErr else { /* … */ }Я не хочу иметь дело с переназначением из временного необязательного, или приходится постоянно разворачиватьobj! во всем коде, который следует.

То есть, это похоже на законный вариант использования для неявно развернутых опций, и мне интересно, почему я до сих пор не могу использовать его здесь.

Ответы на вопрос(1)

Ваш ответ на вопрос