Поиск…


Синтаксис

  • let name = json["name"] as? String ?? "" // Выход: 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"]]

понижающее приведение

Переменная может быть понижена до подтипа с использованием операторов типа литья as? , и as! ,

Как as? оператор пытается применить к подтипу.
Он может выйти из строя, поэтому он возвращает необязательный.

let value: Any = "John"

let name = value as? String
print(name) // prints Optional("John")

let age = value as? Double
print(age) // prints nil

Как as! оператор заставляет бросок.
Он не возвращает необязательный, но сбой, если сбой выполняется.

let value: Any = "Paul"

let name = value as! String
print(name) // prints "Paul"

let age = value as! Double // crash: "Could not cast value…"

Обычно используются операторы типа cast с условной разверткой:

let value: Any = "George"

if let name = value as? String {
    print(name) // prints "George"
}

if let age = value as? Double {
    print(age) // Not executed
}

Кастинг с переключателем

Оператор switch также может использоваться для попытки кастинга в разные типы:

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"

Приведение к базовому типу

Оператор as будет перенаправлен на супертип. Поскольку это не может быть неудачно, оно не возвращает необязательный.

let name = "Ringo"
let value = string as Any  // `value` is of type `Any` now

Пример использования downcast для параметра функции, включающего подклассирование

С помощью понижающего преобразования можно использовать код и данные подкласса внутри функции, принимающей параметр ее суперкласса.

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

Тип литья в Swift Language


Литье под давлением

Тип casting - это способ проверить тип экземпляра или обработать этот экземпляр как другой суперкласс или подкласс из другого места в его собственной иерархии классов.

Тип casting в Swift реализуется с помощью операторов is и as. Эти два оператора предоставляют простой и выразительный способ проверить тип значения или присвоить значение другому типу.


понижающее приведение

Константа или переменная определенного типа класса может фактически ссылаться на экземпляр подкласса за кулисами. Если вы считаете, что это так, вы можете попытаться спуститься к типу подкласса с оператором литья типа (как? Или как!).

Поскольку downcasting может выйти из строя, оператор литого типа работает в двух разных формах. Условная форма, как ?, возвращает необязательное значение типа, который вы пытаетесь сбрасывать. Принудительная форма, как !, пытается понизить и принудительно развернуть результат как одно составное действие.

Используйте условную форму оператора литья типа (как?), Если вы не уверены, что преуменьшение будет успешным. Эта форма оператора всегда будет возвращать необязательное значение, и значение будет равно нулю, если нисходящее значение невозможно. Это позволяет проверить успешное нажатие.

Используйте форсированную форму оператора типа cast (as!), Только если вы уверены, что downcast всегда будет успешным. Эта форма оператора вызовет ошибку времени выполнения, если вы попытаетесь сбрасывать неправильный тип класса. Узнать больше.


Преобразование строк в Int & Float: -

     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 to String

    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"

Целое число к значению строки

    let numbers = 888
    let intValue = String(numbers)
    print(intValue) // Output : "888"

Значение Float to String

    let numbers = 888.00
    let floatValue = String(numbers)
    print(floatValue)

Необязательное значение Float для String

    let numbers: Any = 888.00
    let floatValue = String(describing: numbers)
    print(floatValue) // Output : 888.0

Необязательное значение String to Int

    let hitCount = "100"
    let data :AnyObject = hitCount
    let score = Int(data as? String ?? "") ?? 0
    print(score)

Значения Downcasting от 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"]

Значения Downcasting из дополнительного 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"]

Управление JSON Response с условиями

    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"]

Управление Nil Response с условием

    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) 

Выход: Empty Dictionary




Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow