私はobj-cで言っていました
[self.tabBarController.viewControllers objectAtIndex:1];
しかし、今はSwift ObjectAtIndexはもうありません
self.tabBarController.viewControllers.ObjectAtIndex
更新
わかりました、簡単にします。tabBarControllerが2つのオブジェクト[FirstViewController、SecondViewController]を含み、オブジェクト間にデリゲートを作成しようとしています。ここにデリゲートを設定するコードがあります。
var Svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
Svc.delegate = self
実行すると、このエラー0x1064de80dが発生しました:movq%r14、%rax、コンソールエラーは表示されません
あなたのコードはOKです:
var svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
svc.delegate = self
...ただし、キャストから推測できるため、末尾の!
マークと:SecondViewController
タイプの定義は省略できます。
var svc = self.tabBarController.viewControllers[1] as SecondViewController
間違ったクラスにキャストしようとすると、問題が発生します。 [1]
にあるオブジェクトのクラスのデバッグログ名を出力してみてください。キャストの前にこれを追加して、クラス名を確認します。
let vcTypeName = NSStringFromClass(self.tabBarController.viewControllers[1].classForCoder)
println("\(vcTypeName)")
更新:
コメントで理解したように、受信したViewControllerをUINavigationController
にキャストする必要があります。
var nc = self.tabBarController.viewControllers[1] as UINavigationController
後でnc.viewControllers
プロパティを調べて、たとえばそのtopViewController
がSecondViewController
であるかどうかを確認できます。
if nc.topViewController is SecondViewController {
var svc = nc.topViewController as SecondViewController
// your code goes here
}
SwiftではobjectAtIndex
は必要ありません。subscript
演算子を使用するだけです。
self.tabBarController.viewControllers[1]