1. ホーム
  2. アイオス

[解決済み】SwiftでUI_USER_INTERFACE_IDIOM()を使って現在のデバイスを検出する

2022-03-31 10:10:18

質問

に相当するものは何ですか? UI_USER_INTERFACE_IDIOM() SwiftでiPhoneとiPadを区別するには?

私は Use of unresolved identifier というエラーが発生します。

解決方法は?

Swiftで作業するときは enum UIUserInterfaceIdiom と定義されている。

enum UIUserInterfaceIdiom : Int {
    case unspecified
    
    case phone // iPhone and iPod touch style UI
    case pad   // iPad style UI (also includes macOS Catalyst)
}

として使えるわけです。

UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified

あるいはSwitch文で。

    switch UIDevice.current.userInterfaceIdiom {
    case .phone:
        // It's an iPhone
    case .pad:
        // It's an iPad (or macOS Catalyst)

     @unknown default:
        // Uh, oh! What could it be?
    }

UI_USER_INTERFACE_IDIOM() はObjective-Cのマクロで、次のように定義されています。

#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)

また、Objective-Cで作業している場合でも UI_USER_INTERFACE_IDIOM() マクロは、iOS 3.2 以下をターゲットとする場合にのみ必要です。iOS 3.2 以降にデプロイする場合は [UIDevice userInterfaceIdiom] を直接入力します。