Swift3 Can';无法从元数据中获取作为字符串的键值
我从MPMediaItem中获取元数据,如下所示:Swift3 Can';无法从元数据中获取作为字符串的键值,swift3,metadata,mpmediaitem,mpmediaplayercontroller,nscfnumber,Swift3,Metadata,Mpmediaitem,Mpmediaplayercontroller,Nscfnumber,我从MPMediaItem中获取元数据,如下所示: let url = item.value(forProperty:MPMediaItemPropertyAssetURL) as? NSURL let asset = AVURLAsset(url: url! as URL, options: nil) let metaArray = asset.metadata for metadata in metaArray{ print("-----metadata:\(metadata)")
let url = item.value(forProperty:MPMediaItemPropertyAssetURL) as? NSURL
let asset = AVURLAsset(url: url! as URL, options: nil)
let metaArray = asset.metadata
for metadata in metaArray{
print("-----metadata:\(metadata)")
print("-----metadata.key:\(String(describing: metadata.key))")
}
但是,当我打印一块元数据时,“key”将打印为数值,而不是打印输出中显示的“pcst”:
----元数据:
-----metadata.key:可选(1885565812)
所有元数据/密钥都会发生这种情况(此特定媒体项中有29个)
还要注意这一行代码:
let realString = NSString(string: metadata.key! as! String)
导致此错误的原因:
无法将类型为“\u NSCFNumber”(0x1b80dcdf0)的值强制转换为“NSString”(0x1b80edae8)。
如何获取键(“pcst”)的字符串值?可能是您正在查找的是
AVMetadataItem
的is属性
for metadata in metaArray{
print(metadata.identifier ?? "DefaultValue")
}
如果其他人想查看我正在使用的代码:
func returnKeyString(_ inVal: String)->String{
// expecting the metadata for "identifier" as input - returns key value
// eg "itsk/ldes" -> "ldes"
// or "id3/%00WFD" etc. -> "wfd"
var sFinal:String = ""
if (inVal.contains("/")){
sFinal = (inVal.components(separatedBy: "/")[1])
}
if sFinal.contains("%"){
sFinal = sFinal.components(separatedBy: "%")[1]
let index1 = sFinal.index(sFinal.startIndex, offsetBy: 2)
sFinal = sFinal.substring(from: index1)
}
return sFinal.lowercased()
}
它看起来会起作用-我只需要解析字符串以删除“/”之前的字符,删除“/”和后面的4个字符。@wayneh您可以使用
组件(分隔方式:)
和/
并访问结果中的最后一个对象。从字符串中删除字符的方法很简单吗?@wayneh方法太多了,就像我在上一篇评论中建议的那样,你也可以通过使用range(of:)
方法查找/
索引来使用订阅。是的,我希望在Java、C#和其他许多语言中都能找到一些简单的方法……)