road - swift vxi




यह जांचना कि क्या ऑब्जेक्ट स्विफ्ट में दिया गया है (9)

अगर आपको इस तरह का जवाब है:

{
  "registeration_method": "email",
  "is_stucked": true,
  "individual": {
    "id": 24099,
    "first_name": "ahmad",
    "last_name": "zozoz",
    "email": null,
    "mobile_number": null,
    "confirmed": false,
    "avatar": "http://abc-abc-xyz.amazonaws.com/images/placeholder-profile.png",
    "doctor_request_status": 0
  },
  "max_number_of_confirmation_trials": 4,
  "max_number_of_invalid_confirmation_trials": 12
}

और आप मूल्य is_stucked जांच करना चाहते हैं जिसे AnyObject के रूप में पढ़ा जाएगा, आपको बस इतना करना है

if let isStucked = response["is_stucked"] as? Bool{
  if isStucked{
      print("is Stucked")
  }
  else{
      print("Not Stucked")
 }
}

मेरे पास एक सरणी है जो AnyObject से बना है। मैं इसे फिर से शुरू करना चाहता हूं, और सभी तत्वों को ढूंढना चाहता हूं जो सरणी उदाहरण हैं।

स्विफ्ट में दिए गए प्रकार का ऑब्जेक्ट कैसा है या नहीं, मैं कैसे जांच सकता हूं?


इसके बारे में चेतावनी दीजिये:

var string = "Hello" as NSString
var obj1:AnyObject = string
var obj2:NSObject = string

print(obj1 is NSString)
print(obj2 is NSString)
print(obj1 is String)
print(obj2 is String) 

सभी चार अंतिम पंक्तियां सच होती हैं, ऐसा इसलिए है क्योंकि यदि आप टाइप करते हैं

var r1:CGRect = CGRect()
print(r1 is String)

... यह निश्चित रूप से "झूठा" प्रिंट करता है, लेकिन एक चेतावनी कहती है कि सीजीआरईटी से स्ट्रिंग तक कास्ट विफल हो जाता है। तो कुछ प्रकार ब्रिज किए गए हैं, 'is' कीवर्ड का जवाब एक निहित कलाकार है।

आपको इनमें से किसी एक का बेहतर उपयोग करना चाहिए:

myObject.isKind(of: MyClass.self)) 
myObject.isMember(of: MyClass.self))

मान लें कि drawTriangle UIView का एक उदाहरण है। यह जांचने के लिए कि क्या DrawTriangle प्रकार UITableView है:

स्विफ्ट 3 में ,

if drawTriangle is UITableView{
    // in deed drawTriangle is UIView
    // do something here...
} else{
    // do something here...
}

यह आपके द्वारा परिभाषित कक्षाओं के लिए भी इस्तेमाल किया जा सकता है। आप दृश्य के सबव्यूस देखने के लिए इसका इस्तेमाल कर सकते हैं।


मेरे पास ऐसा करने के 2 तरीके हैं:

if let thisShape = aShape as? Square 

या:

aShape.isKindOfClass(Square)

यहां एक विस्तृत उदाहरण दिया गया है:

class Shape { }
class Square: Shape { } 
class Circle: Shape { }

var aShape = Shape()
aShape = Square()

if let thisShape = aShape as? Square {
    println("Its a square")
} else {
    println("Its not a square")
}

if aShape.isKindOfClass(Square) {
    println("Its a square")
} else {
    println("Its not a square")
}

संपादित करें: 3 अब:

let myShape = Shape()
if myShape is Shape {
    print("yes it is")
}

यदि आप किसी विशिष्ट प्रकार के विरुद्ध जांचना चाहते हैं तो आप निम्न कार्य कर सकते हैं:

if let stringArray = obj as? [String] {
    // obj is a string array. Do something with stringArray
}
else {
    // obj is not a string array
}

आप "जैसा!" का उपयोग कर सकते हैं और यदि obj प्रकार का नहीं है तो वह रनटाइम त्रुटि फेंक देगा [String]

let stringArray = obj as! [String]

आप एक समय में एक तत्व भी देख सकते हैं:

let items : [Any] = ["Hello", "World"]
for obj in items {
   if let str = obj as? String {
      // obj is a String. Do something with str
   }
   else {
      // obj is not a String
   }
}

यदि आप केवल यह जानना चाहते हैं कि कोई ऑब्जेक्ट किसी दिए गए प्रकार का उप प्रकार है तो एक आसान तरीका है:

class Shape {}
class Circle : Shape {}
class Rectangle : Shape {}

func area (shape: Shape) -> Double {
  if shape is Circle { ... }
  else if shape is Rectangle { ... }
}

"जांच जांच ऑपरेटर (है) का प्रयोग यह जांचने के लिए करें कि कोई उदाहरण किसी निश्चित सबक्लास प्रकार का है या नहीं। टाइप चेक ऑपरेटर सत्य लौटाता है यदि इंस्टेंस उस सबक्लास प्रकार का है और गलत नहीं है। "से उद्धरण: ऐप्पल इंक।" स्विफ्ट प्रोग्रामिंग भाषा। " iBooks

उपर्युक्त में 'एक निश्चित उपclass प्रकार' वाक्यांश महत्वपूर्ण है। is Circle का उपयोग is Circle और is Rectangle को आयतकार द्वारा स्वीकार किया जाता है क्योंकि उस मान shape को Shape ( Circle और Rectangle का एक सुपरक्लास) घोषित किया जाता है।

यदि आप आदिम प्रकार का उपयोग कर रहे हैं, तो सुपरक्लास Any होगा। यहाँ एक उदाहरण है:

 21> func test (obj:Any) -> String {
 22.     if obj is Int { return "Int" }
 23.     else if obj is String { return "String" }
 24.     else { return "Any" }
 25. } 
 ...  
 30> test (1)
$R16: String = "Int"
 31> test ("abc")
$R17: String = "String"
 32> test (nil)
$R18: String = "Any"

स्विफ्ट 3:

class Shape {}
class Circle : Shape {}
class Rectangle : Shape {}

if aShape.isKind(of: Circle.self) {
}

स्विफ्ट 2.2 - 4.0.3 में अब आप कर सकते हैं:

if object is String
{
}

फिर अपनी सरणी फ़िल्टर करने के लिए:

let filteredArray = originalArray.filter({ $0 is Array })

स्विफ्ट 4 के लिए:

if obj is MyClass{
    // then object type is MyClass Type
}






swift