2015-04-19 66 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