সুইফটে UI_USER_INTERFACE_IDIOM () সহ বর্তমান ডিভাইস সনাক্ত করুন


244

UI_USER_INTERFACE_IDIOM()আইফোন এবং আইপ্যাডের মধ্যে সনাক্ত করতে সুইফটের সমতুল্য কী ?

Use of unresolved identifierসুইফটে সংকলন করার সময় আমি একটি ত্রুটি পাই ।

উত্তর:


535

সুইফ্টের সাথে কাজ করার সময় আপনি নিম্নলিখিতটি 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 UIDevice.current.userInterfaceIdiom {
    case .phone:
        // It's an iPhone
    case .pad:
        // It's an iPad (or macOS Catalyst)
    case .unspecified:
        // Uh, oh! What could it be?
    }

UI_USER_INTERFACE_IDIOM() একটি অবজেক্টিভ-সি ম্যাক্রো, যা সংজ্ঞায়িত হয়:

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

এছাড়াও, লক্ষ্য করুন যে অবজেক্টিভ-সি এর সাথে কাজ করার সময়ও, UI_USER_INTERFACE_IDIOM()আইওএস 3.2 এবং নীচে লক্ষ্য করে ম্যাক্রো কেবল তখনই প্রয়োজন required আইওএস ৩.২ বা তার বেশি স্থাপনার সময়, আপনি [UIDevice userInterfaceIdiom]সরাসরি ব্যবহার করতে পারেন ।


19
কিছু মনে করো না. আমি এটি নিয়ে কাজ করতে পেরেছিif UIDevice.currentDevice().userInterfaceIdiom == .Pad
মিহাই ফ্রাতু

4
টনি যেমন নীচের উত্তরের একটিতে উল্লিখিত হয়েছে, অ্যাপ্লিকেশনটি টেস্টফ্লাইটের মাধ্যমে স্থাপন করা হয় তখন সুইফট অ্যাপ্লিকেশনগুলিতে UI_USER_INTERFACE_IDIOM ক্র্যাশ হয়। আশ্চর্যের বিষয় হল, অ্যাপটি এক্স-কোড থেকে সরাসরি ডিভাইসে আপলোড করা হলে এটি কাজ করে। আমি এই বাগটিও আঘাত করেছি।
Zmey

1
@ জেমে হ্যাঁ, আমার অ্যাপ্লিকেশনটিও প্রত্যাখ্যান করা হয়েছে কারণ UI_USER_INTERFACE_IDIOM পর্যালোচনা করে ক্র্যাশ করেছে, খুব আশ্চর্যজনক
পিসমুন

অনেক ধন্যবাদ. আমি যখন এই অ্যাপটির নতুন সংস্করণটি অ্যাপ স্টোর থেকে প্রকাশিত এবং ক্র্যাশ করেছিলাম তখন আমি এই বাগটি নিয়ে লড়াই করেছিলাম, তবে কখনই এটি এক্সকোডের মাধ্যমে ইনস্টল করা হয়নি। আশা করি ঠিক করার জন্য আমি একটি তাত্ক্ষণিক পর্যালোচনা পেয়ে যাব।
কম্পিউটারসপেজ্ল

6
সুইফ্ট 3-তে UIDevice.currentDevice().userInterfaceIdiomপরিণত হয়UIDevice.current.userInterfaceIdiom
তিব্বতের সমুদ্র উপকূল

113

আপনার এই জিবি ডেভিসআইএনফো ফ্রেমওয়ার্কটি ব্যবহার করা উচিত ...

অ্যাপল এটি সংজ্ঞায়িত করেছে:

public enum UIUserInterfaceIdiom : Int {

    case unspecified

    case phone // iPhone and iPod touch style UI

    case pad // iPad style UI

    @available(iOS 9.0, *)
    case tv // Apple TV style UI

    @available(iOS 9.0, *)
    case carPlay // CarPlay style UI
}

সুতরাং ডিভাইসের কঠোর সংজ্ঞার জন্য এই কোডটি ব্যবহার করা যেতে পারে

struct ScreenSize
{
    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
    static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
    static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

struct DeviceType
{
    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
    static let IS_IPHONE_5          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
    static let IS_IPHONE_6_7          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
    static let IS_IPHONE_6P_7P         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
    static let IS_IPAD_PRO          = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
}

ব্যবহারবিধি

if DeviceType.IS_IPHONE_6P_7P {
    print("IS_IPHONE_6P_7P")
}

আইওএস সংস্করণ সনাক্ত করতে

struct Version{
    static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue
    static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)
    static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)
    static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)
}

ব্যবহারবিধি

if Version.iOS8 {
    print("iOS8")
}

1
আমি struct ScreenSize/DeviceTypeঅ্যাপ্রোচ পছন্দ করি যেহেতু এটি সিমুলেটারে কাজ করে
সফট ডিজাইনার

অনুমোদিত উত্তরটি এই সুস্পষ্ট উত্তরে যেতে হবে
আশুর

ভারত থেকে প্রচুর ভালবাসা, আপনি প্রচেষ্টার প্রশংসা করুন, আরও ভাল
স্ট্যাকওভারফ্লো

চমৎকার উত্তর! জাউর থেকে +1)
XXX

আপডেটেড কোডটি কী? আইফোন and এবং P পি
বৈভব ঝাভারী

36

সুইফট 2.0 এবং আইওএস 9 এবং এক্সকোড 7.1

// 1. request an UITraitCollection instance
let deviceIdiom = UIScreen.mainScreen().traitCollection.userInterfaceIdiom

// 2. check the idiom
switch (deviceIdiom) {

case .Pad:
    print("iPad style UI")
case .Phone:
    print("iPhone and iPod touch style UI")
case .TV: 
    print("tvOS style UI")
default:
    print("Unspecified UI idiom")

}

সুইফট 3.0 এবং সুইফট 4.0

// 1. request an UITraitCollection instance
let deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom

// 2. check the idiom
switch (deviceIdiom) {

case .pad:
    print("iPad style UI")
case .phone:
    print("iPhone and iPod touch style UI")
case .tv: 
    print("tvOS style UI")
default:
    print("Unspecified UI idiom")
}

ইউআইআরট্রেটক্লিকেশন ব্যবহার করুন। আইওএস বৈশিষ্ট্য পরিবেশটি UITraitEn ਵਾਤਾਵਰਣ প্রোটোকলের বৈশিষ্ট্য সংগ্রহের বৈশিষ্ট্য প্রকাশ করা হলেও এটি উদ্ভাসিত । এই প্রোটোকলটি নিম্নলিখিত ক্লাসগুলি গ্রহণ করেছে:

  • UIScreen
  • UIWindow
  • UIViewController
  • UIPresentationController
  • UIView

25

যদি / অন্য কেস:

 if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad)     
 {
        // Ipad
 }
 else 
 {
       // Iphone
 }

পাবলিক এনওএম ইউআইউজারআইন্টারফেস আইডিওম: ইন্ট {কেস অনির্ধারিত @ উপলভ্য (আইওএস 3.2, *) কেস ফোন // আইফোন এবং আইপড টাচ স্টাইল ইউআই @ উপলভ্য (আইওএস 3.2, *) কেস প্যাড // আইপ্যাড স্টাইল ইউআই উপলব্ধ নেই (আইওএস 9.0, *) কেস টিভি // অ্যাপল টিভি স্টাইল ইউআই} UIUserInterfaceIdiom এর সংজ্ঞাটি দেখুন it's এটি প্যাড না হলে এটি ফোন, টিভি, অনির্ধারিত could
আনচার্ট

19

আমি সেভাবে করি:

UIDevice.current.model

এটি ডিভাইসের নাম দেখায়।

আইপ্যাড বা আইফোন কিনা তা পরীক্ষা করতে:

if ( UIDevice.current.model.range(of: "iPad") != nil){
    print("I AM IPAD")
} else {
    print("I AM IPHONE")
}

5
আমার পক্ষে অবশ্যই সবচেয়ে ভাল সমাধান solution ব্যবহারকারীর জন্য অনুসন্ধান করুন ইন্টারফেসআইডিয়োমের একটি সমস্যা রয়েছে: যদি আপনার অ্যাপ্লিকেশনটি কেবল আইফোনের জন্য হয় তবে আপনি আইপ্যাডে অ্যাপ্লিকেশন চালু করেন তবে ইউজারআইন্টারফেসআইডিয়ম == .ফোন
লুকা দাভানজো

অবশ্যই সেরা সমাধান। ভাল একটা.
ফ্যাটি

10

সুইফট 2.x:

যোগ করা হচ্ছে এর Beslav Turalov উত্তর নতুন এন্ট্রি আইপ্যাড প্রো সহজে এই লাইন থেকে খুঁজে পাই হতে পারে

আইপ্যাড প্রো সনাক্ত করতে

struct DeviceType
{
    ...
    static let IS_IPAD_PRO = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
}

সুইফট 3 (টিভি ও গাড়ি যুক্ত):

struct ScreenSize
{
    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
    static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
    static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

struct DeviceType
{
    static let IS_IPHONE            = UIDevice.current.userInterfaceIdiom == .phone
    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
    static let IS_IPHONE_5          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
    static let IS_IPHONE_6          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
    static let IS_IPHONE_6P         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
    static let IS_IPHONE_7          = IS_IPHONE_6
    static let IS_IPHONE_7P         = IS_IPHONE_6P
    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
    static let IS_IPAD_PRO_9_7      = IS_IPAD
    static let IS_IPAD_PRO_12_9     = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
    static let IS_TV                = UIDevice.current.userInterfaceIdiom == .tv
    static let IS_CAR_PLAY          = UIDevice.current.userInterfaceIdiom == .carPlay
}

struct Version{
    static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue
    static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)
    static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)
    static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)
    static let iOS10 = (Version.SYS_VERSION_FLOAT >= 10.0 && Version.SYS_VERSION_FLOAT < 11.0)
}

ব্যবহার :

if DeviceType.IS_IPHONE_7P { print("iPhone 7 plus") }
if DeviceType.IS_IPAD_PRO_9_7 && Version.iOS10 { print("iPad pro 9.7 with iOS 10 version") }

10

এটির মতো একটি এক্সটেনশন যুক্ত করার চেষ্টা করুন:

    public extension UIDevice {

    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8 where value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
        case "iPhone7,2":                               return "iPhone 6"
        case "iPhone7,1":                               return "iPhone 6 Plus"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,2":                               return "iPhone 6s Plus"
        case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
        case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
        case "iPhone8,4":                               return "iPhone SE"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":return "iPad Pro"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386", "x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }

}

আপনি এটি এভাবে ব্যবহার করবেন:

let modelName = UIDevice.currentDevice().modelName

সম্পাদনা সিমুলেটারের জন্য, আপনি এখানে একটি সমাধান চেষ্টা করতে পারেন


দুর্দান্ত, যদিও সিমুলেটার দিয়ে পরীক্ষা করে কেবল সিমুলেটর ফেরত দেয়। এই সমস্যা এড়ানোর একটি উপায় আছে কি?
স্টিভ

7

সুইফট 4.2 এক্সটেনশন

 public extension UIDevice {

    class var isPhone: Bool {
        return UIDevice.current.userInterfaceIdiom == .phone
    }

    class var isPad: Bool {
        return UIDevice.current.userInterfaceIdiom == .pad
    }

    class var isTV: Bool {
        return UIDevice.current.userInterfaceIdiom == .tv
    }

    class var isCarPlay: Bool {
        return UIDevice.current.userInterfaceIdiom == .carPlay
    }
}

ব্যবহার

if UIDevice.isPad {
   // Do something
}

5

সুইফ্ট 4 এবং এক্সকোড 9.2 এ, আপনি কোনও ডিভাইস নীচের উপায়ে আইফোন / আইপ্যাড কিনা তা সনাক্ত করতে পারেন।

if (UIDevice.current.userInterfaceIdiom == .pad){
   print("iPad")
}
else{
   print("iPhone")
}

অন্য উপায়

    let deviceName = UIDevice.current.model
    print(deviceName);
    if deviceName == "iPhone"{
        print("iPhone")
    }
    else{
        print("iPad")
    }

5

আপনাকে ধন্যবাদ সবাই সমর্থন :))

UIDevice + + Extensions.swift

import Foundation
import UIKit

extension UIDevice {
    static let modelName: String = {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

         func mapToDevice(identifier: String) -> String { // swiftlint:disable:this cyclomatic_complexity
            #if os(iOS)
            switch identifier {
            case "iPod5,1":                                 return "iPod Touch 5"
            case "iPod7,1":                                 return "iPod Touch 6"
            case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
            case "iPhone4,1":                               return "iPhone 4s"
            case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
            case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
            case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
            case "iPhone7,2":                               return "iPhone 6"
            case "iPhone7,1":                               return "iPhone 6 Plus"
            case "iPhone8,1":                               return "iPhone 6s"
            case "iPhone8,2":                               return "iPhone 6s Plus"
            case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
            case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
            case "iPhone8,4":                               return "iPhone SE"
            case "iPhone10,1", "iPhone10,4":                return "iPhone 8"
            case "iPhone10,2", "iPhone10,5":                return "iPhone 8 Plus"
            case "iPhone10,3", "iPhone10,6":                return "iPhone X"
            case "iPhone11,2":                              return "iPhone XS"
            case "iPhone11,4", "iPhone11,6":                return "iPhone XS Max"
            case "iPhone11,8":                              return "iPhone XR"
            case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
            case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
            case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
            case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
            case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
            case "iPad6,11", "iPad6,12":                    return "iPad 5"
            case "iPad7,5", "iPad7,6":                      return "iPad 6"
            case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
            case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
            case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
            case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
            case "iPad6,3", "iPad6,4":                      return "iPad Pro 9.7 Inch"
            case "iPad6,7", "iPad6,8":                      return "iPad Pro 12.9 Inch"
            case "iPad7,1", "iPad7,2":                      return "iPad Pro 12.9 Inch 2. Generation"
            case "iPad7,3", "iPad7,4":                      return "iPad Pro 10.5 Inch"
            case "AppleTV5,3":                              return "Apple TV"
            case "AppleTV6,2":                              return "Apple TV 4K"
            case "AudioAccessory1,1":                       return "HomePod"
            case "i386", "x86_64":                          return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "iOS"))"
            default:                                        return identifier
            }
            #elseif os(tvOS)
            switch identifier {
            case "AppleTV5,3": return "Apple TV 4"
            case "AppleTV6,2": return "Apple TV 4K"
            case "i386", "x86_64": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "tvOS"))"
            default: return identifier
            }
            #endif
        }
        return mapToDevice(identifier: identifier)
    }()
}

enum DeviceName: String {
    case iPod_Touch_5 = "iPod Touch 5"
    case pod_Touch_6 = "Pod Touch 6"
    case iPhone_4 = "iPhone 4"
    case iPhone_4s = "iPhone 4s"
    case iPhone_5 = "iPhone 5"
    case iPhone_5c = "iPhone 5c"
    case iPhone_5s = "iPhone 5s"
    case iPhone_6 = "iPhone 6"
    case iPhone_6_Plus = "iPhone 6 Plus"
    case iPhone_6s = "iPhone 6s"
    case iPhone_6s_Plus = "iPhone 6s Plus"
    case iPhone_7 = "iPhone 7"
    case iPhone_7_Plus = "iPhone 7 Plus"
    case iPhone_SE = "iPhone SE"
    case iPhone_8 = "iPhone 8"
    case iPhone_8_Plus = "iPhone 8 Plus"
    case iPhone_X = "iPhone X"
    case iPhone_XS = "iPhone XS"
    case iPhone_XS_Max = "iPhone XS Max"
    case iPhone_XR = "iPhone XR"
    case iPad_2 = "iPad 2"
    case iPad_3 = "iPad 3"
    case iPad_4 = "iPad 4"
    case iPad_Air = "iPad Air"
    case iPad_Air_2 = "iPad Air 2"
    case iPad_5 = "iPad 5"
    case iPad_6 = "iPad 6"
    case iPad_Mini = "iPad Mini"
    case iPad_Mini_2 = "iPad Mini 2"
    case iPad_Mini_3 = "iPad Mini 3"
    case iPad_Mini_4 = "iPad Mini 4"
    case iPad_Pro_9_7_Inch = "iPad Pro 9.7 Inch"
    case iPad_Pro_12_9_Inch = "iPad Pro 12.9 Inch"
    case iPad_Pro_12_9_Inch_2_Generation = "iPad Pro 12.9 Inch 2. Generation"
    case iPad_Pro_10_5_Inch = "iPad Pro 10.5 Inch"
    case apple_TV = "Apple TV"
    case apple_TV_4K = "Apple TV 4K"
    case homePod = "HomePod"
}

SharedFunctions.swift

import Foundation
import UIKit
func isDevice(_ name: DeviceName) -> Bool {
    let modelName = UIDevice.modelName.replacingOccurrences(of: "Simulator", with: "").trimmed()
    if name.rawValue == modelName {
        return true
    }

    return false
}

স্ট্রিং + + Whitespace.swift

import Foundation

extension String {
   public func trimmed() -> String {
    return self.trimmingCharacters(in: .whitespacesAndNewlines)
  }
}

5

বর্তমান ডিভাইসটি আইফোন বা আইপ্যাড যাচাই করার জন্য এটি ব্যবহার করে দেখুন:

সুইফট 5

struct Device {
    static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad
    static let IS_IPHONE = UIDevice.current.userInterfaceIdiom == .phone
}

ব্যবহার করুন:

if(Device.IS_IPHONE){
    // device is iPhone
}if(Device.IS_IPAD){
    // device is iPad (or a Mac running under macOS Catalyst)
}else{
    // other
}

3

সুইফট 2.0 এবং আইওএস 7+ / আইওএস 8+ / আইওএস 9+

public class Helper {
    public class var isIpad:Bool {
        if #available(iOS 8.0, *) {
            return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Pad
        } else {
            return UIDevice.currentDevice().userInterfaceIdiom == .Pad
        }
    }
    public class var isIphone:Bool {
        if #available(iOS 8.0, *) {
            return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Phone
        } else {
            return UIDevice.currentDevice().userInterfaceIdiom == .Phone
        }
    }
}

ব্যবহার:

if Helper.isIpad {

}

অথবা

guard Helper.isIpad else {
    return
} 

ধন্যবাদ @ ব্যবহারকারী 3378170


আইওএস 9- এর জন্য @ ব্যবহারকারী 3378170 ধন্যবাদ
ইয়্যানস্টেফ

3

এফওয়াইআই, আমি সুইফটে UI_USER_INTERFACE_IDIOM()আমার অ্যাপ্লিকেশনটির জন্য ব্যবহার করেছি। অ্যাপটি XCode 6.3.1 দিয়ে সেই আদেশের কোনও সতর্কতা ছাড়াই ভালভাবে সংকলন করা যায়, সিমুলেটর (যে কোনও নির্বাচিত ডিভাইস সহ) এবং 7.1 থেকে 8.3 পর্যন্ত আইওএস সংস্করণ সহ আমার সমস্ত আসল ডিভাইসগুলিতে (আইফোন, আইপ্যাড) ভাল চলে।

তবে অ্যাপলটি পর্যালোচকদের ডিভাইসে ক্র্যাশ করেছে (এবং তা প্রত্যাখ্যান করা হয়েছিল)। আইটিউনস কানেক্টে আরও কয়েকটি পুনরায় আপলোড নিয়ে সমস্যাটি সনাক্ত করতে আমার কয়েকদিন লেগেছিল।

এখন আমি UIDevice.currentDevice().userInterfaceIdiomপরিবর্তে ব্যবহার করি এবং আমার অ্যাপ্লিকেশন এ জাতীয় ক্রাশ থেকে বাঁচতে পারে।


ঠিক সঠিক। এটি ক্রাশ করে এবং সমস্যাটি বের করার চেষ্টা করে আমার অনেক মাথা ব্যাথা করে।
প্রবীণ

আমি যখনই কোনও কোডের ত্রুটিযুক্ত বার্তা ছাড়াই আমার কোডটিতে UI_USER_INTERFACE_IDIOM () ব্যবহার করেছি তখনই সুইফ্ট সংকলকটি ক্রাশ করে চলেছে। খুব অদ্ভুত.
tschoffelen

fww, অ্যাপলের ডকটি এখন জানিয়েছে "যদি আপনার অ্যাপ্লিকেশনটি আইওএস ৩.২ এ চালায় এবং তার পরিবর্তে ইউজারআইন্টারফেসআইডিয়ম ব্যবহার করুন।"
ডেভ

1

আপনি যদি বর্তমান ডিভাইসটির আইপ্যাড বা আইফোন কিনা তা পরীক্ষা করতে চান তবে আপনি এই লাইন কোডটি ব্যবহার করতে পারেন:

 if(UIDevice.currentDevice().userInterfaceIdiom == .Pad){

  }else if(UIDevice.currentDevice().userInterfaceIdiom == .Phone){

  }

1

সুইফট 3.0 :

let userInterface = UIDevice.current.userInterfaceIdiom

if(userInterface == .pad){
    //iPads
}else if(userInterface == .phone){
    //iPhone
}else if(userInterface == .carPlay){
    //CarPlay
}else if(userInterface == .tv){
    //AppleTV
}

1

উপরের উত্তরগুলিতে কয়েকটি সংযোজন করেছেন যাতে আপনি স্ট্রিংয়ের মানের পরিবর্তে কোনও প্রকার ফেরত পাবেন।

আমি অনুভব করেছি যে এটি প্রাথমিকভাবে ইউআই সামঞ্জস্যের জন্য ব্যবহার করা হচ্ছে তাই আমি সমস্ত উপ মডেলগুলি আইফোন 5 এস অন্তর্ভুক্ত করার জন্য এটি প্রাসঙ্গিক বলে মনে করি না তবে এটি ডিভাইস অ্যারেতে মডেল পরীক্ষায় যুক্ত করে সহজেই বাড়ানো যেতে পারে I

শারীরিক এবং সিমুলেটর ডিভাইসগুলির সাথে সুইফট 3.1 এক্সকোড 8.3.2 এ কাজ করার জন্য পরীক্ষিত

বাস্তবায়ন:

UIDevice.whichDevice()

public enum SVNDevice {
  case isiPhone4, isIphone5, isIphone6or7, isIphone6por7p, isIphone, isIpad, isIpadPro
}

extension UIDevice {
  class func whichDevice() -> SVNDevice? {
    let isDevice = { (comparision: Array<(Bool, SVNDevice)>) -> SVNDevice? in
      var device: SVNDevice?
      comparision.forEach({
        device = $0.0 ? $0.1 : device
      })
      return device
    }

    return isDevice([
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0, SVNDevice.isiPhone4),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0, SVNDevice.isIphone5),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0, SVNDevice.isIphone6or7),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0, SVNDevice.isIphone6por7p),
      (UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0, SVNDevice.isIpad),
      (UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0, SVNDevice.isIpadPro)])
  }
}



private struct ScreenSize {
  static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
  static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
  static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
  static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

আমি এসভিএনবুটস্টেপার নামে একটি কাঠামো তৈরি করেছি যাতে এটি এবং কিছু অন্যান্য সহায়ক প্রোটোকল অন্তর্ভুক্ত রয়েছে, এটি সর্বজনীন এবং কার্থেজের মাধ্যমে উপলব্ধ।


0

আইওএস 13 এর পরে, UI_USER_INTERFACE_IDIOMঅবচিত করা হয়েছে। যদি আপনার কোডটি এখনও থাকে তবে আপনি Obj-Cনিম্নলিখিতগুলি ব্যবহার করতে পারেন:

if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    // device is iPad
}

কোথায়:

typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {
    UIUserInterfaceIdiomUnspecified = -1,
    UIUserInterfaceIdiomPhone API_AVAILABLE(ios(3.2)), // iPhone and iPod touch style UI
    UIUserInterfaceIdiomPad API_AVAILABLE(ios(3.2)), // iPad style UI
    UIUserInterfaceIdiomTV API_AVAILABLE(ios(9.0)), // Apple TV style UI
    UIUserInterfaceIdiomCarPlay API_AVAILABLE(ios(9.0)), // CarPlay style UI
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.