2017-07-12 11 views
1

私はswift 3を使用していますが、コードがコンパイルされますが、実行するとシグナルSIGABRTで最初の行が途切れ、メッセージ:'AVPlayer'タイプの値を 'Swift.AnyObject.Type'にキャストできません

if (object as AnyObject).isKind(of: AVPlayer() as Any as! AnyClass) { 
     switch keyPath { 
      case "status": 
       if let value = change[NSKeyValueChangeKey.newKey] as? Int, let itemStatus = AVPlayerItemStatus(rawValue: value) { 
        if itemStatus == .readyToPlay { 
         status = .playing 
         notifyOnPlayBegins() 
        } else if itemStatus == .failed { 
         let error = player?.currentItem?.error 
         print("AVPlayerItem status: \(itemStatus)\nError: \(error)") 
         status = .stopped 
         notifyError(error as! NSError) 
        } 
       } 
      break 

AVPlayer:

open class AVPlayer : NSObject

+0

object'宣言 'のタイプは –

+0

チェックアウトの答えを、あなたが任意の混乱を持っているなら、私に知らせて... –

+0

'オブジェクト:Any? ' –

答えて

0
import Foundation 

class AVPlayer : NSObject { 

} 

let object : Any? = AVPlayer() 

if object is AVPlayer { 
    print("Meow") 
} 
0

それはあなたを助けることをチェックしてください。

次の3つの方法でオブジェクトの種類を確認することができます:

let object:Any? 
object = AVPlayer() 

if let player = object as? AVPlayer { 
    print("true") 
} 
if (object!).isKind(of: AVPlayer.self) { 
    print("true") 
} 
if object is AVPlayer { 
    print("true") 
} 
+0

私は 'guardal keyPath = keyPath、object = AVPlayer()、let change = else else {return}'と書くと、コンパイルできません "条件バインディングの初期化子にはAVPlayerではなく、 " –

+0

私たちはインメモリ化ではなくタイプキャストを行うので、' let object = AVPlayer() 'を書くことはできません。 –

+1

あなたは 'as? 'で条件付きの型キャスティングを行っていると' isKind(of:) 'を使う必要はなく(' classForCoder() 'を使用しても実際には正確ではないので、' AVPlayer.self'代わりに)。 – Hamish

関連する問題