【问题标题】:Apple Swift Code creates an errorApple Swift 代码创建错误
【发布时间】:2015-06-25 19:14:19
【问题描述】:

我最近升级到 XCode 6.3,我正在尝试按照 Apple 文档启动 ODQuery 并收到错误。

“Int”不能转换为“ODMatchType”

我正在使用苹果自己的文档Open Directory Programming Guide

这是我的 Swift 代码:

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 中的代码并获得相同的结果,请告诉我。

【问题讨论】:

    标签: swift xcode6.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)
    

    【讨论】:

    • 这和我在这里的抱怨真的没有什么不同:stackoverflow.com/questions/24108827/… ODMatchType 是 UInt32,但 kODMatchContains 是一个 Int。因此,您不能在期望另一个的地方使用一个,因为数字类型之间没有隐式强制;您必须显式地强制转换为预期的类型。当 API 似乎一开始就故意给你错误的类型时,这尤其令人抓狂。
    • 是的,这就是文档中的说明,但这会在我的所有测试中产生错误。
    • 它会产生一个不同的错误。我回答了你问的问题。显然,你必须在整件事的最后去掉那个奇怪的问号。它在那里做过什么是个谜……
    • 对不起,你是对的。它解决了我的问题。我以前从未见过。当我第一次在这里阅读您的代码时,并不清楚。我喜欢。谢谢你。你知道苹果在哪里记录的吗?我在任何地方都找不到这个答案?
    • @Ecks 没有什么可“记录”的,真的。这就是 Swift 的工作方式。我关于 Swift 的书讨论了这个问题:apeth.com/swiftBook/ch03.html#_coercion
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2011-07-18
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多