FYI: Swift ошибка здесь: https://bugs.swift.org/browse/SR-3871
У меня возникла странная проблема, когда актер не работает, но консоль показывает его как правильный тип.
У меня есть общедоступный протокол
public protocol MyProtocol { }
И я реализую это в модуле с помощью общедоступного метода, который возвращает экземпляр.
internal struct MyStruct: MyProtocol { }
public func make() -> MyProtocol { return MyStruct() }
Затем, на мой взгляд, контроллер, я запускаю segue с этим объектом в качестве отправителя
let myStruct = make()
self.performSegue(withIdentifier: "Bob", sender: myStruct)
Пока все хорошо.
Проблема заключается в моем методе prepare(for:sender:)
.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Bob" {
if let instance = sender as? MyProtocol {
print("Yay")
}
}
}
Однако приведение экземпляра в MyProtocol всегда возвращает nil
.
Когда я запускаю po sender as! MyProtocol
в консоли, это дает мне ошибку Could not cast value of type '_SwiftValue' (0x1107c4c70) to 'MyProtocol' (0x1107c51c8)
. Однако po sender
выдаст действительный экземпляр Module.MyStruct
.
Почему эта работа не работает?
(мне удалось решить это, поместив мой протокол в структуру, но я хотел бы знать, почему он не работает, как есть, и если есть лучший способ его исправить)