Swift Language
Type Casting
Zoeken…
Syntaxis
let name = json["name"] as? String ?? ""
// Uitvoer: johnlet name = json["name"] as? String // Output: Optional("john")
let name = rank as? Int // Output: Optional(1)
let name = rank as? Int ?? 0 // Output: 1
let name = dictionary as? [String: Any] ?? [:] // Output: ["name" : "john", "subjects": ["Maths", "Science", "English", "C Language"]]
Downcasting
Een variabele kan met behulp van de type cast-operatoren as?
en as!
.
Het as?
operator probeert te casten naar een subtype.
Het kan mislukken, daarom retourneert het een optioneel.
let value: Any = "John"
let name = value as? String
print(name) // prints Optional("John")
let age = value as? Double
print(age) // prints nil
Het as!
operator forceert een cast.
Het retourneert geen optioneel, maar crasht als de cast mislukt.
let value: Any = "Paul"
let name = value as! String
print(name) // prints "Paul"
let age = value as! Double // crash: "Could not cast value…"
Het is gebruikelijk om type cast-operators te gebruiken met voorwaardelijk uitpakken:
let value: Any = "George"
if let name = value as? String {
print(name) // prints "George"
}
if let age = value as? Double {
print(age) // Not executed
}
Gieten met schakelaar
De switch
kan ook worden gebruikt om te proberen in verschillende typen te casten:
func checkType(_ value: Any) -> String {
switch value {
// The `is` operator can be used to check a type
case is Double:
return "value is a Double"
// The `as` operator will cast. You do not need to use `as?` in a `switch`.
case let string as String:
return "value is the string: \(string)"
default:
return "value is something else"
}
}
checkType("Cadena") // "value is the string: Cadena"
checkType(6.28) // "value is a Double"
checkType(UILabel()) // "value is something else"
Upcasting
De operator as
zal naar een supertype casten. Omdat het niet kan falen, retourneert het geen optioneel.
let name = "Ringo"
let value = string as Any // `value` is of type `Any` now
Voorbeeld van het gebruik van een downcast voor een functieparameter met subklasse
Een downcast kan worden gebruikt om de code en gegevens van een subklasse te gebruiken in een functie die een parameter van de superklasse gebruikt.
class Rat {
var color = "white"
}
class PetRat: Rat {
var name = "Spot"
}
func nameOfRat(🐭: Rat) -> String {
guard let petRat = (🐭 as? PetRat) else {
return "No name"
}
return petRat.name
}
let noName = Rat()
let spot = PetRat()
print(nameOfRat(noName))
print(nameOfRat(spot))
Type casting in Swift Language
Type Casting
Type casting is een manier om het type van een instantie te controleren, of om die instantie te behandelen als een andere superklasse of subklasse van ergens anders in zijn eigen klassenhiërarchie.
Type casting in Swift wordt geïmplementeerd met de is en als operators. Deze twee operatoren bieden een eenvoudige en expressieve manier om het type van een waarde te controleren of een waarde naar een ander type te casten.
Downcasting
Een constante of variabele van een bepaald type klasse kan in feite verwijzen naar een instantie van een subklasse achter de schermen. Waar u denkt dat dit het geval is, kunt u proberen het type subklasse te downcasten met een operator voor type cast (als? Of als!).
Omdat downcasting kan mislukken, heeft de operator voor type cast twee verschillende vormen. De voorwaardelijke vorm, zoals?, Retourneert een optionele waarde van het type waarnaar u probeert te downcasten. De geforceerde vorm, zoals !, probeert het terneergeslagen en forceert het resultaat als een enkele samengestelde actie.
Gebruik de voorwaardelijke vorm van de operator type cast (zoals?) Als u niet zeker weet of de downcast zal slagen. Deze vorm van de operator retourneert altijd een optionele waarde en de waarde is nul als de downcast niet mogelijk was. Hiermee kunt u controleren op een succesvolle downcast.
Gebruik de geforceerde vorm van de operator type cast (als!) Alleen als u zeker weet dat de downcast altijd zal slagen. Deze vorm van de operator veroorzaakt een runtime-fout als u probeert te downgraden naar een onjuist type klasse. Meer weten.
String naar Int & Float conversie: -
let numbers = "888.00"
let intValue = NSString(string: numbers).integerValue
print(intValue) // Output - 888
let numbers = "888.00"
let floatValue = NSString(string: numbers).floatValue
print(floatValue) // Output : 888.0
Float naar String Conversion
let numbers = 888.00
let floatValue = String(numbers)
print(floatValue) // Output : 888.0
// Get Float value at particular decimal point
let numbers = 888.00
let floatValue = String(format: "%.2f", numbers) // Here %.2f will give 2 numbers after decimal points we can use as per our need
print(floatValue) // Output : "888.00"
Geheel getal naar tekenreekswaarde
let numbers = 888
let intValue = String(numbers)
print(intValue) // Output : "888"
Zweven naar tekenreekswaarde
let numbers = 888.00
let floatValue = String(numbers)
print(floatValue)
Optionele Float-waarde naar String
let numbers: Any = 888.00
let floatValue = String(describing: numbers)
print(floatValue) // Output : 888.0
Optionele waarde String tot Int
let hitCount = "100"
let data :AnyObject = hitCount
let score = Int(data as? String ?? "") ?? 0
print(score)
Downloaden van waarden van JSON
let json = ["name" : "john", "subjects": ["Maths", "Science", "English", "C Language"]] as [String : Any]
let name = json["name"] as? String ?? ""
print(name) // Output : john
let subjects = json["subjects"] as? [String] ?? []
print(subjects) // Output : ["Maths", "Science", "English", "C Language"]
Downcastwaarden van optionele JSON
let response: Any = ["name" : "john", "subjects": ["Maths", "Science", "English", "C Language"]]
let json = response as? [String: Any] ?? [:]
let name = json["name"] as? String ?? ""
print(name) // Output : john
let subjects = json["subjects"] as? [String] ?? []
print(subjects) // Output : ["Maths", "Science", "English", "C Language"]
Beheer JSON Response met voorwaarden
let response: Any = ["name" : "john", "subjects": ["Maths", "Science", "English", "C Language"]] //Optional Response
guard let json = response as? [String: Any] else {
// Handle here nil value
print("Empty Dictionary")
// Do something here
return
}
let name = json["name"] as? String ?? ""
print(name) // Output : john
let subjects = json["subjects"] as? [String] ?? []
print(subjects) // Output : ["Maths", "Science", "English", "C Language"]
Beheer nulrespons met voorwaarde
let response: Any? = nil
guard let json = response as? [String: Any] else {
// Handle here nil value
print("Empty Dictionary")
// Do something here
return
}
let name = json["name"] as? String ?? ""
print(name)
let subjects = json["subjects"] as? [String] ?? []
print(subjects)