0

これにより、UIUserNotificationType の配列が UIUserNotificationType の変数に割り当てられます。これはうまくいかないはずです:

1)

var userNotificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
print(userNotificationTypes.dynamicType) // UIUserNotificationType

[UIUserNotificationType] のタイプは次のとおりです。

2)

let intermidiate = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
print(intermidiate.dynamicType) // Array<UIUserNotificationType>

割り当てようとすると、期待どおりに失敗します。

3)

userNotificationTypes = intermidiate // Cannot assign a value of type '[UIUserNotificationType]' to a value of type 'UIUserNotificationType'

に割り当てようとして[UIUserNotificationType]UIUserNotificationType明らかに機能しないのに、なぜ1)コンパイルするのでしょうか?

4

1 に答える 1

1

の構文は[.Alert, .Badge, .Sound]、2 つの異なる目的で使用できます。Array<UIUserNotificationType>設定されたビット マスクを定義または作成OptionTypeSetできます。UIUserNotificationType

結果は、割り当て変数の宣言された型に依存します。

OptionSetType

let userNotificationTypes: UIUserNotificationType = [.Alert, .Badge, .Sound]

userNotificationTypes実際には OptionSetType ビット マスクであり、C の観点からは次のようになります。(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound)

配列

let userNotificationTypes: [UIUserNotificationType] = [.Alert, .Badge, .Sound]

userNotificationTypes型の配列ですUIUserNotificationType

于 2015-09-03T10:12:33.430 に答える