2016-09-11 24 views
11

Trong khi cố gắng di chuyển sang Swift 3 (trong một dự án có chứa khoảng nửa/nửa mã swift/target-c), tôi đang gặp phải vấn đề. Chúng tôi tuyên bố giao thức cụ thể này trong Objective-C như thế này:Lỗi chuyển đổi Swift 3/NSError

@protocol AProtocolDeclaration <NSObject> 

- (void)someEventHappened:(nullable NSError *)error; 

@end 

Swift trình biên dịch tạo ra sau cho việc kê khai giao thức trên:

public protocol AProtocolDeclaration : NSObjectProtocol { 

    public func someEventHappened(_ error: Error?) 
}  

Và khi thực hiện các giao thức trong một concrete class (in swift) và cố gắng để xác định tạo ra phương pháp, tôi tiếp tục nhận được lỗi một cái gì đó như: không thể chuyển đổi Error to NSError. Tôi không chắc chắn cách khắc phục lỗi này. Bất kỳ ai có thể đề nghị?

+0

Có một cái nhìn [ở đây ] (https://github.com/apple/swift-evolution/blob/master/proposals/0112-nserror-bridging.md) – Carpsen90

+1

Vui lòng cụ thể hơn. Là lỗi của bạn "không thể chuyển đổi lỗi thành NSError" một lỗi thời gian chạy hoặc biên dịch lỗi thời gian? Tất nhiên mã gây ra vấn đề là cần thiết. Và đừng nói "điều gì đó". Sao chép thông báo lỗi chính xác trên bảng điều khiển. – OOPer

Trả lời

0

Tôi nghĩ rằng đây là một lỗi với SourceKit trong Xcode 8. Tính đến Xcode 8.1 và 8.2 beta 2 giao thức chức năng chứa NSError tham số được bắc cầu một cách chính xác để Swift 3 như Error:

extension MyClass: AProtocolDeclaration { 
    func someEventHappened(_ error: Error?) { 
     print(error ?? "none") 
    } 
} 
+0

Vâng, đây chắc chắn là một lỗi trong XCode và với XCode mới, nó hoạt động tốt. – Anand

Các vấn đề liên quan