let healthWrite = Set(arrayLiteral:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning),
HKQuantityType.workoutType()
])
ответ
Конструктор хочет литерал массива не массив, так что вы бы инициализировать что-то вроде этого
let healthWrite = Set(arrayLiteral:
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!,
HKQuantityType.workoutType()
)
Подробнее о массивах и массиве буквального https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html
EDIT:
Это необязательные значения, которые дает вам скорбь не "[]"
let healthWrite = Set([
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!,
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!,
HKQuantityType.workoutType()]
)
еще лучше, если вы используете guard
или if let
, чтобы проверить, что HKObjectType.quantityTypeForIdentifier
фактически возвращает значение перед созданием набора
Вы * можете * создать 'Set' из массива,' arrayLiteral: 'не требуется вообще. –
Вы, конечно, правы. Но удаление скобок фактически позволяет компилятору предлагать разворачивание возвращаемых значений. – Moriya
Инициализатор 'arrayLiteral' поступает из протокола' ArrayLiteralConvertible' и предназначен для использования следующим образом: 'let healthWrite: Set = [item1, item2, ...]' – Kametrixom
Уточняющих документации. Каков тип возврата 'amountTypeForIdentifier()'? Что указывает знак вопроса в 'HKQuantityType? '? Что вы знаете о опциях и разворачивании? –