Zoeken…


Syntaxis

  • let name = json["name"] as? String ?? "" // Uitvoer: john

  • let 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) 

Uitgang: Empty Dictionary




Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow