2015-04-19 63 views
0

我最近升級到XCode 6.3,我試圖根據Apple文檔啓動一個ODQuery並收到錯誤。蘋果Swift代碼創建錯誤

'詮釋' 是無法轉換爲 'ODMatchType'

我使用蘋果自己的文檔Open Directory Programming Guide

這裏是我的銀行代碼:

var err:NSError? 
var session = ODSession.defaultSession() 
var node = ODNode(session: session, name: "/Local/Default", error: &err) 
var query = ODQuery(node: node, forRecordTypes: kODRecordTypeUsers, attribute: kODAttributeTypeRecordType, matchType: kODMatchContains, queryValues: "darren", returnAttributes: kODAttributeTypeStandardOnly, maximumResults: 10, error: &err)? 

這個問題似乎是否kODMatchContains或任何其他被嘗試的matchType與Swift 1.2函數不兼容?

如果有人知道發生了什麼,或者您可以自己嘗試6.3中的代碼並獲得相同的結果,請告訴我。

回答

1

這與Swift 1.2無關。這在Swift中總是如此。 matchType:參數需要是ODMatchType。它強制到ODMatchType,像這樣:

... matchType: ODMatchType(kODMatchContains), ... 

然後該行將編譯就好了(一旦你在最後去掉問號)。

顯然,我必須拼出來你...

var err:NSError? 
var session = ODSession.defaultSession() 
var node = ODNode(session: session, name: "/Local/Default", error: &err) 
var query = ODQuery(node: node, forRecordTypes: kODRecordTypeUsers, attribute: kODAttributeTypeRecordType, matchType: ODMatchType(kODMatchContains), queryValues: "darren", returnAttributes: kODAttributeTypeStandardOnly, maximumResults: 10, error: &err) 
+0

這是從我的投訴確實沒有什麼不同的位置:http://stackoverflow.com/questions/24108827/swift-numerics-and- cgfloat-cgpoint-cgrect-etc ODMatchType是UInt32,但'kODMatchContains'是一個Int。因此,您不能使用預期的另一個,因爲數字類型之間不存在隱式強制;你必須強迫_explicitly_預期的類型。當API似乎故意將錯誤的類型交給你時,它尤其令人生氣。 – matt

+0

是的,這是文檔的狀態,但是這會在我的所有測試中產生錯誤。 – Ecks

+0

它會產生_different_錯誤。我回答了你問的問題。很顯然,你必須在整個事情結束時刪除那個奇怪的問號。它曾經在那裏做過一個謎...... – matt