15. int a = 1, b = 3, c = 5, d = 4;
// 明示キャストによる制御
c * (a / b * d) // 0
c * (a / (double)b * d) // 6.666666666666666
c * (int)(a / (double)b * d) // 5
(int)(c * ((double)a / b * d)) // 6
c * (double)(a / b) * d // 0
16. short shortValue = 0x7FFF;
long longValue = 0x12345678;
// 再解釈キャスト
short value1 = *(short*)&longValue; // 0x5678
long value2 = *(long*)&shortValue; // 0x6080000000207FFF
double value3 = *(double*)&longValue; // 1.508974781700064e-315
20. id object;
// 可能性の判定
if ([object isKindOfClass:[NSNumber class]])
{
// 整合性が約束されればキャストを実施
NSNumber *number = (NSNumber*)object;
}
21.
22.
23.
24.
25. let integerValue: Int = 65
let doubleValue: Double = 128.9
// 型を変換
let value1 = UInt(integerValue)
let value2 = Int(doubleValue)
let value3 = UnicodeScalar(integerValue)
let value4 = Double(integerValue)
26. let sourceValue: UInt = 18446744073709551615
// 変換できないとき
let value1 = Int(sourceValue)
let value2 = Int("120x") // nil
let value3 = try MyValue(sourceValue) // Error
27. let source: UInt = 18446744073709551000
// 型を変換
let value1 = Int(bitPattern: source) // -616
let value2 = Int8(truncatingBitPattern:source) // -104
28. let source: Int64 = 0x12345678
// 再解釈
var value1 = unsafeBitCast(source, Double.self)
// 1.508974781700064e-315
var value2 = unsafeBitCast(source, Int32.self)
29. as as? as!
let instance: NSData = NSMutableData()
// アップキャスト
let object1 = instance as NSObject
// ダウンキャスト
let object2 = instance as? NSMutableData
let object2 = instance as! NSMutableData
30. let instance: NSData = NSMutableData()
// アップキャスト
let object1: NSObject = instance
// ダウンキャスト
let object2 = instance as? NSMutableData
let object2 = instance as! NSMutableData
31. let object = NSString()
// 無関係な型へのキャスト
let number1 = object as? NSData // nil
let number2 = object as! NSData // ERROR
32.
33.
34.
35.
36. (int)value Int(value)
[instance toDouble] Double(instance)
(SubClass*)object
(BaseClass*)object
object as? SubClass
object as BaseClass
[object isKindOfClass:
[SomeClass class]]
if let obj = object
as? SomeClass {
*(double*)&value
unsafeBitCast(
value, Double.self)