Swift value()でBoolとInt取得、アップキャストで型は決められない?
概要
MPMediaItemのプロパティをvalue()で取得。
Optional(0)はアップキャストでBoolかIntを決められない。
コード
import MediaPlayer func changeAny(value:Any) { print("- Original \(value)") if let value = value as? Bool { print("- Bool \(value)") } else if let value = value as? String { print("- String \(value)") } else if let value = value as? Int { print("- Int \(value)") } } let boolValue = true let intValue = 0 let item = MPMediaItem() print("Bool:\(boolValue)") changeAny(value: boolValue) print("Int:\(intValue)") changeAny(value: intValue) print("MPMediaItemPropertyIsCloudItem:\(item.isCloudItem)") changeAny(value: item.value(forKey: MPMediaItemPropertyIsCloudItem)) print("MPMediaItemPropertyPlayCount:\(item.playCount)") changeAny(value: item.value(forKey: MPMediaItemPropertyPlayCount))
実行結果
Bool:true - Original true - Bool true Int:0 - Original 0 - Int 0 MPMediaItemPropertyIsCloudItem:false - Original Optional(0) - Bool false MPMediaItemPropertyPlayCount:0 - Original Optional(0) - Bool false
Boolになる。
Optional(0)なので無理なのか。
changeAny()内as? Boolとas? Intの順番を逆にする
func changeAny(value:Any) { print("- Original \(value)") if let value = value as? Int { print("- Int \(value)") } else if let value = value as? String { print("- String \(value)") } else if let value = value as? Bool { print("- Bool \(value)") } }
実行結果
Bool:true - Original true - Bool true Int:0 - Original 0 - Int 0 MPMediaItemPropertyIsCloudItem:false - Original Optional(0) - Int 0 MPMediaItemPropertyPlayCount:0 - Original Optional(0) - Int 0
Intになる。