2015-11-17 17 views
5

Tôi đang cố gắng để thực hiện phương pháp giao thức tùy chọn này từ Objective-C trong mau lẹ:Thực hiện Nghị định thư objectivec trong nhanh chóng

- (void)customHTTPProtocol:(CustomHTTPProtocol *)protocol logWithFormat: 
(NSString *)format arguments:(va_list)arguments; 

(cfr: https://developer.apple.com/library/ios/samplecode/CustomHTTPProtocol/Introduction/Intro.html) Tôi đã viết phương pháp này trong nhanh chóng:

func customHTTPProtocol(`protocol`: CustomHTTPProtocol!, logWithFormat format: String!, arguments: CVaListPointer) { 
} 

nó than phiền rằng không thể đáp ứng yêu cầu tùy chọn và gợi ý thêm @objc trước khi phương pháp, nhưng nếu tôi thêm @objc, nó sẽ báo lỗi (CVaListPointer không thể đại diện trong Objective-C)

Vấn đề là thử nghiệm này không thành công:

if ([strongDelegate respondsToSelector:@selector(customHTTPProtocol:logWithFormat:arguments:)]) { 

và phương pháp nhanh chóng không được gọi

Trả lời

0

Nếu bạn muốn sử dụng Objective-C @protocol trong lớp nhanh chóng sau đó bạn phải nhập lớp Objective-C vào của bạn Tệp Bridging-Header được tạo bởi XCode khi bạn sử dụng tệp khách quan-c trong dự án nhanh chóng của bạn. Sau đó, rõ ràng là bạn phải thêm đại biểu trong tập tin nhanh chóng, nơi bạn phải sử dụng nó như thế nào.

class classname : baseClass<yourDelegate> { 

} 

Trong tệp này trước tiên bạn phải thêm tất cả các phương thức ủy quyền cần thiết và sau đó thêm phương pháp tùy chọn bạn phải sử dụng. Nếu bạn không thêm phương thức ủy nhiệm được yêu cầu thì nó sẽ cho bạn lỗi.

Tuy nhiên, nếu bạn muốn sử dụng từ nhanh chóng với Objective-C sau đó bạn phải thêm @objc trước tên và nhập khẩu tập tin nhanh chóng với tập tin Objective-C, bạn cũng đã thêm @objc trước khi đến lớp như thế này,

@objc protocol DelegateName { 
    //declare your required and optional delegate method here 
} 

@objc classname : baseClass<yourDelegate> { 

} 

Và sau đó nhập lớp nhanh chóng của bạn vào tập tin Objective-c của bạn như thế này,

#import <PROJ_NAME/PROJ_DIR-Swift.h> 

Và điều quan trọng để thêm:

classObj.delegate = self 
+0

Điều này đã được thực hiện, tôi có một vấn đề khác, do thực tế là phương thức giao thức là tùy chọn và (va_list) có thể được dịch sai – atrebbi

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