Swift Language
タイプキャスティング
サーチ…
構文
let name = json["name"] as? String ?? ""
//出力: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"]]
ダウンキャスティング
変数は、 型キャスト演算子を使用してサブタイプにダウンキャストできます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)