FYI: lỗi Swift lớn lên ở đây: https://bugs.swift.org/browse/SR-3871Không cast trong Swift từ Any? giao thức
Tôi đang gặp một vấn đề kỳ lạ nơi một dàn diễn viên không hoạt động, nhưng giao diện điều khiển cho thấy nó như đúng loại.
Tôi có một giao thức nào
public protocol MyProtocol { }
Và tôi thực hiện điều này trong một module, với một phương pháp nào đó trả về một ví dụ.
internal struct MyStruct: MyProtocol { }
public func make() -> MyProtocol { return MyStruct() }
Sau đó, trong điều khiển quan điểm của tôi, tôi kích hoạt một segue với đối tượng đó là người gửi
let myStruct = make()
self.performSegue(withIdentifier: "Bob", sender: myStruct)
Tất cả tốt cho đến nay.
Sự cố ở phương thức prepare(for:sender:)
của tôi.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Bob" {
if let instance = sender as? MyProtocol {
print("Yay")
}
}
}
Tuy nhiên, ví dụ cho MyProtocol luôn trả về nil
.
Khi tôi chạy po sender as! MyProtocol
trong bảng điều khiển, nó cho tôi lỗi Could not cast value of type '_SwiftValue' (0x1107c4c70) to 'MyProtocol' (0x1107c51c8)
. Tuy nhiên, po sender
sẽ xuất ra một phiên bản Module.MyStruct
hợp lệ.
Tại sao tác vụ này không hoạt động?
(Tôi đã quản lý để giải quyết nó bằng cách đấm bốc giao thức của tôi trong một cấu trúc, nhưng tôi muốn biết lý do tại sao nó không làm việc như là, và nếu có một cách tốt hơn để sửa chữa nó)
chỉ cần đi ra ngoài trên một chi ở đây, nhưng không thay đổi tuyên bố nội bộ ở đây 'nội bộ cấu trúc MyStruct: MyProtocol {}' để 'công' thay đổi bất cứ điều gì? – Dennis
@Dennis Nope :( – deanWombourne