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になる。






