Где это?пойти в условный актерский состав в Swift? - PullRequest
0 голосов
/ 09 июля 2019

Где опционально?символ перейти в условный актерский состав?В чем различия?

Вот мой тестовый код в Playground с предупреждением, где мой комментарий говорит "// предупреждение".

import UIKit
import CloudKit

let int: UInt8 = 1
let data: Data = Data([int])
let record: CKRecord = CKRecord(recordType: "record_type")
record.setObject(data as __CKRecordObjCValue?, forKey: "field")
record.setObject(data as? __CKRecordObjCValue, forKey: "field") // warning

В предупреждающем сообщении написано:

Условное приведение из 'Data' к '__CKRecordObjCValue' всегда успешно

Как Xcode интерпретирует каждый пример в зависимости от того, где необязательный?Марк идет?

Если я сделаю переменную данных Data?вместо этого, как в приведенном ниже коде, предупреждение изменяется на:

Условное понижение с «Данные?»в __CKRecordObjCValue - мостовое преобразование;Вы хотели использовать «как»?

import UIKit
import CloudKit

let int: UInt8 = 1
let data: Data? = Data([int])
let record: CKRecord = CKRecord(recordType: "record_type")
record.setObject(data as __CKRecordObjCValue?, forKey: "field")
record.setObject(data as? __CKRecordObjCValue, forKey: "field")

Что такое мостовое преобразование?

1 Ответ

3 голосов
/ 09 июля 2019

Прежде всего, пожалуйста, используйте ключ подписки и CKRecordValue (а не уродливый __CKRecordObjCValue).

  • as? CKRecordValue является условным понижением (неверно)
  • as CKRecordValue? - это мост, приведенный к необязательному типу протокола (справа)

    let int: UInt8 = 1
    let data : Data? = Data([int])
    let record = CKRecord(recordType: "record_type")
    record["field"] = data as CKRecordValue?
    

В необязательном случае просто соедините тип без вопросительных знаков

let data = Data([int])
...
record["field"] = data as CKRecordValue

Примечание:

Поскольку Data соответствует CKRecordValueProtocol, избыточный состав моста

record["field"] = data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...