2016-02-05 42 views
1

在Objective Objective中,以前能夠實現自動機制以允許具有私有NSDictionary屬性的對象通過自動將方法調用轉換爲字典來實現簡單協議'valueForKey'請求,並將這些請求傳遞給具有相應鍵值的字典。通過自動將方法調用映射到字典中的鍵來實現Swift協議

例如,我會有一個對象'ABCArtist',它將執行artistProtocol。這個協議有一個方法 - (NSString *)artistName; 'ABCArtist'對象將通過返回[self.privateDictionary valueForKey:artistName];來實現此方法;

這個過程依賴於重寫NSObject的方法:

- (void)forwardInvocation:(NSInvocation *)invocation; 
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector; 
- (id)forwardingTargetForSelector:(SEL)aSelector; 

我曾嘗試採用同樣的過程,斯威夫特,但是我不能,因爲我得到了編譯器錯誤使用此:

'NSInvocation' is unavailable in Swift: NSInvocation and related APIs not available

是否有任何人發現通過自動查詢字典中與協議方法同名的值來實現協議?

這個用例映射到從API返回的JSON內容字典,如果這個自動映射可以完成,我只需要編寫協議,並將其轉發到生成的JSON字典。

+0

出於好奇,你爲什麼要這樣做?使用字典作爲後備存儲幾乎可以肯定比簡單地實現屬性要多得多。 –

回答

1

這種在運行時對任意消息的動態處理只能在Objective-C中完成。一方面,調用純Swift方法甚至不通過Objective-C動態調度機制。所以它必須是一個@objc方法,並且forwardInvocation:邏輯必須在Objective-C中實現。

+0

是的,我得到了同樣的結論,但是我想我也許會問,謝謝你的回覆! – Mike

相關問題