2015-04-19 3 views
0

Я недавно обновился до XCode 6.3, и я пытаюсь инициировать ODQuery в соответствии с документацией Apple и получить сообщение об ошибке.Apple Swift Code создает ошибку

'Int' не конвертируется в 'ODMatchType'

Я использую собственную документацию от Apple 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 и получить те же результаты, сообщите мне.

ответ

1

Это не имеет никакого отношения к Swift 1.2. Это всегда было в Свифте. Параметр 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

Смежные вопросы