2015-10-24 3 views
0
let healthWrite = Set(arrayLiteral:[ 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMassIndex), 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned), 
    HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning), 
    HKQuantityType.workoutType() 
]) 
+0

Уточняющих документации. Каков тип возврата 'amountTypeForIdentifier()'? Что указывает знак вопроса в 'HKQuantityType? '? Что вы знаете о опциях и разворачивании? –

ответ

1

Конструктор хочет литерал массива не массив, так что вы бы инициализировать что-то вроде этого

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 фактически возвращает значение перед созданием набора

+3

Вы * можете * создать 'Set' из массива,' arrayLiteral: 'не требуется вообще. –

+0

Вы, конечно, правы. Но удаление скобок фактически позволяет компилятору предлагать разворачивание возвращаемых значений. – Moriya

+0

Инициализатор 'arrayLiteral' поступает из протокола' ArrayLiteralConvertible' и предназначен для использования следующим образом: 'let healthWrite: Set = [item1, item2, ...]' – Kametrixom