lag*_*oon 4 objective-c uiviewcontroller ios swift ios8
我试图在Swift中的视图之间传递一个int变量,但我不知道如何访问其他View控制器的属性.
在目标CI中会做这样的事情
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
AnsViewController *ansViewController = [storyBoard instantiateViewControllerWithIdentifier:@"ansView"];
ansViewController.num = theNum;
[self presentViewController:ansViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
在另一个viewcontroller.h文件中,我会写这个来声明属性来获取数据
@property (nonatomic) int num;
Run Code Online (Sandbox Code Playgroud)
现在对于斯威夫特我有这个
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let ansViewController : UIViewController = storyBoard.instantiateViewControllerWithIdentifier("ansView") as UIViewController
ansViewController.num = theNum;
self.presentViewController(ansViewController, animated:true, completion:nil)
Run Code Online (Sandbox Code Playgroud)
在另一个视图控制器的.swift文件中我通过执行来声明num
let num: int
Run Code Online (Sandbox Code Playgroud)
我很确定这不是正确的方法,因为我在这一行上收到错误
ansViewController.num = theNum;
Run Code Online (Sandbox Code Playgroud)
它说,"UIViewController没有名为num的成员"我如何解决这个错误,我做错了什么?
谢谢
问题
在Objective C中,您已将ansViewController显式定义为AnsViewController*,其属性为num.
但是,在你的Swift代码中,你已经明确地将ansViewController定义为UIViewController,而不是AnsViewController.因此,编译器不知道这实际上是一个AnsViewController,还是其他一些UIViewController子类,或者只是一个vanilla UIViewController.
现在为解决方案.
我们将尝试将返回的值转发为AnsViewController,然后在向下转换成功的情况下访问该属性(我假设它总是会,但是从其余的代码和笔尖上下文,我可以'确定).
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
// To be safe, let's attempt to downcast the returned value as an AnsViewController
if let ansViewController = storyBoard.instantiateViewControllerWithIdentifier("ansView") as? AnsViewController {
// We get here if the "as?" succeeds with a non-nil value
ansViewController.num = theNum;
self.presentViewController(ansViewController, animated:true, completion:nil)
} else {
// Out of context, I can't see why this case would (or could) ever happen
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你知道这将永远成功(从我所看到的,-instantiateWith的返回值是确定性的),那么你可以更简洁一点:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
// Force the downcast as an AnsViewController (this could crash at runtime
// if the return value is nil or not an AnsViewController, so again,
// the previous example is safer
let ansViewController = storyBoard.instantiateViewControllerWithIdentifier("ansView") as AnsViewController
ansViewController.num = theNum;
self.presentViewController(ansViewController, animated:true, completion:nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4328 次 |
| 最近记录: |