Swift3でdynamicTypeからtype(of:)になったさいにクラス同一判定で躓いたこと
概要
Swift2.2プロジェクトをXcode8にしてSwift3にしてエラーをポチポチ潰していたのですが、dynamicTypeで少し躓いたので共有しておきます。
内容
Swift2.2
下記プログラムは、Swift2.2で書いてました。
渡されたUIViewControllerのサブクラス(Hoge/Fuga)が、既にセット済みであれば、即終了する処理です。
class HogeViewController : UIViewController{}
class FugaViewController : UIViewController{}
class MenuViewController : UIViewController{
var contentViewController:UIViewController!
func setContentViewController(contentViewController:UIViewController){
guard self.contentViewController.dynamicType != contentViewController.dynamicType else { return }
// 省略
}
}
Swift3
Swift3+Xcode8では次のようにdynamicTypeからtype(of:)にエラー補完されました。
class HogeViewController : UIViewController{}
class FugaViewController : UIViewController{}
class MenuViewController : UIViewController{
private var contentViewController:UIViewController!
func setContentViewController(contentViewController:UIViewController){
guard type(of:self.contentViewController) != type(of:contentViewController) else { return }
// 省略
}
}
実行結果
正常に動きません。
結果
次のようにif let でunwrapしてから判定するようにしました。
class HogeViewController : UIViewController{}
class FugaViewController : UIViewController{}
class MenuViewController : UIViewController{
private var contentViewController:UIViewController!
func set(contentViewController:UIViewController){
if let currentContentViewController = self.contentViewController {
guard type(of:currentContentViewController) != type(of:contentViewController) else { return }
}
// 省略
}
}
Author And Source
この問題について(Swift3でdynamicTypeからtype(of:)になったさいにクラス同一判定で躓いたこと), 我々は、より多くの情報をここで見つけました https://qiita.com/mothule/items/11d8355b75cd9f33096e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .