2017-05-12 29 views
0
static let didReceiveResponseSelector : Selector = #selector((NSURLConnectionDataDelegate.connection(_:didReceive:)) as (NSURLConnectionDataDelegate) ->(NSURLConnection,URLResponse) ->()) 

此代碼返回錯誤:不明確使用「連接(_:didReceive :)」的

Ambiguous use of 'connection(_:didReceive:)'

我提到GitHub上蘋果的官方發展線程,我很尊敬的語法,但不工作:

Referencing the Objective-C selector of a method

+0

不幸的是,'as'鑄造多義性並不在協議中聲明的方法工作。請檢查[此線程](http://stackoverflow.com/q/39221563/6541007)。 – OOPer

回答

0

解決,只需加上 「?」:

static let didReceiveResponseSelector : Selector = #selector((NSURLConnectionDataDelegate.connection(_:didReceive:)) as ((NSURLConnectionDataDelegate) -> (NSURLConnection,URLResponse) -> void)?) 
0

NSURLConnectionDataDelegate是一個協議,你不能創建使用NSURLConnectionDataDelegate.connection(_:didReceive:)一個選擇,你必須使用NSURLConnectionDataD的實現elegate像:

class YourDelegateImplementation: NSURLConnectionDataDelegate { 
    public func connection(_ connection: NSURLConnection, didReceive data: Data) { 
    } 
} 

然後你就可以創建這樣一個選擇:

let yourDelegate: YourDelegateImplementation = YourDelegateImplementation() 
let yourSelector : Selector = #selector(yourDelegate.connection(_:didReceive:)) 
+0

沒有有可能爲其他委託,因此必須爲這一個可能也和這個 #selector你的代碼無法正常工作 –

+0

看(NSURLConnectionDataDelegate.connectionDidFinishLoading(_ :) –

0

不要投的選擇:

let didReceiveResponseSelector = #selector(NSURLConnectionDelegate.connection(_:didReceive:)) 

另外值得一提的是,委託功能connection(_ connection: NSURLConnection, didReceive challenge: URLAuthenticationChallenge)已棄用connection(_ connection: NSURLConnection, willSendRequestFor challenge: URLAuthenticationChallenge)

+0

對不起,我需要didReceive數據選擇:數據 –

+0

你在NSURLConnectionDataDelegate和NSURLConnectionDelegate之間混淆 –