0

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 を抽出するにはどうすればよいですか?

  1. Xcode 11.2 でビルドすると、何が突然変わったのでしょうか?

  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).
4

1 に答える 1