Xcode 11.2 にアップグレードし、アプリをビルドして実行して以来、Swift の if let ブロックは、それ以外の場合は常に機能していた失敗を報告しています。これが失敗するコードです。
public func remoteClient(receivedData data: [String : Any]?, fromPeer peerID: MCPeerID) {
let params = data?["params"] as? [String:Any]
NSLog("Received image \(params!["timestamp"])")
if let imgData = params?["image"] as? Data, let timeStamp = params?["timestamp"] as? CMTime
{
NSLog("Handling image response")
handleImageResponse(imgData, timeStamp: timeStamp)
} else {
NSLog("Image response failed")
}
}
そして、これがコンソールに出力されるものです
2019-11-02 23:47:52.342324+0530 MyApp [312:9779] Received image Optional(CMTime: {34515835925000/1000000000 = 34515.836})
2019-11-02 23:47:52.343251+0530 MyApp[312:9779] Image response failed
「if let」で CMTime のチェックを削除すると問題は解決しますが、params 辞書から CMTime を抽出するにはどうすればよいですか?
Xcode 11.2 でビルドすると、何が突然変わったのでしょうか?
params!["timestamp"] は CMTime をコンソールに出力していますが、if let 割り当てで何が失敗しますか?
そして、失敗しているのはCMTimeです。私はこれを試しました:
if let imgData = params?["image"] as? Data, let timeStamp = params?["timestamp"] as? Any {
let time = timeStamp as! CMTime
}
そして、私はクラッシュします:
Could not cast value of type 'CMTimeAsValue' (0x10ce321d8) to '__C.CMTime' (0x2355bab00).