Swift3 Can';无法从元数据中获取作为字符串的键值

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)")

我从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)")
    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#和其他许多语言中都能找到一些简单的方法……)