サーチ…


構文

  • 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…"

条件付きアンラッピングを持つ型キャスト演算子を使用するのが一般的です。

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

サブクラス化を含む関数パラメータに対するダウンキャストの使用例

ダウンキャストを使用して、スーパークラスのパラメータを取る関数内のサブクラスのコードとデータを使用することができます。

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言語での型キャスト


タイプキャスティング

型キャストは、インスタンスの型をチェックする方法、またはそのインスタンスを別のスーパークラスまたはサブクラスとして扱う方法です。

Swiftの型キャストはisとas演算子で実装されています。これらの2つの演算子は、値の型をチェックしたり、値を別の型にキャストしたりする簡単で表現力豊かな方法を提供します。


ダウンキャスティング

特定のクラスタイプの定数または変数は、実際にはシーンの背後にあるサブクラスのインスタンスを参照することがあります。これが当てはまると思われる場所では、型キャスト演算子(?または!など)を使用してサブクラス型にダウンキャストしようとすることができます。

ダウンキャストが失敗する可能性があるので、型キャスト演算子は2つの異なる形式で提供されます。条件付きフォームは、?のように、ダウンキャストしようとしているタイプのオプションの値を返します。 !のような強制フォームは、ダウンキャストを試み、結果を単一の複合アクションとして強制的に展開します。

ダウンキャストが成功するかどうか不明な場合は、型キャスト演算子の条件付き形式(?)を使用してください。この形式の演算子は常にオプションの値を返し、ダウンキャストが不可能ならば値はnilになります。これにより、成功したダウンキャストを確認することができます。

ダウンキャストが常に成功すると確信しているときだけ、型キャスト演算子の強制形式(!)を使用してください。誤ったクラスタイプにダウンキャストしようとすると、この形式の演算子がランタイムエラーを引き起こします。 もっと知る。


ストリングからInt&フロートへの変換: -

     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

浮動小数点から文字列への変換

    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"

浮動小数点から文字列への値

    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)

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

オプション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レスポンスの管理

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

条件付き無回答を管理する

    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