在Swift中为一个控制器属性赋值
我想在Swift中的视图之间传递一个intvariables,但我不知道如何访问其他视图控制器的属性。
在Objective CI中会做这样的事情
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; AnsViewController *ansViewController = [storyBoard instantiateViewControllerWithIdentifier:@"ansView"]; ansViewController.num = theNum; [self presentViewController:ansViewController animated:YES completion:nil];
而在另一个viewcontroller.h文件,我会写这个来声明属性来获取数据
@property (nonatomic) int num;
现在Swift我有这个
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)
而在另一个.swift文件的其他视图控制器我做了num声明
let num: int
我很确定,这不是正确的方法,因为我得到了这一行的错误
ansViewController.num = theNum;
它说:“UIViewController没有名为num的成员”我将如何解决这个错误,我做了什么错?
谢谢
问题
在Objective C中,你已经明确地将ansViewController定义为一个AnsViewController *,它具有属性num。
不过,在你的Swift代码中,你明确地将ansViewController定义为UIViewController,而不是AnsViewController。 所以,编译器不知道这实际上是一个AnsViewController,还是其他一些UIViewController子类,或者是一个香草UIViewController。
现在为解决scheme。
我们将尝试以AnsViewController的forms将返回值向下转换,然后在向下转换成功的情况下访问该属性(我假设它始终是这样,但是从代码和笔尖的其余部分中,毋庸置疑)。
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 }
现在,如果你知道这将永远成功(从我所看到的,-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)
- 在viewDidAppear中推视图控制器不起作用
- 使用UICollectionView和NSFetchedResultsController不保存
- Xcode 7.1在iOS 9中NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9813)
- Phonegap 3.3.0不能添加任何插件
- 苹果应用程序内购买和物理/数字商品
- 领域对象缺less除primaryKey之外的所有属性
- 如何在SWIFT中解析时以一种字符串格式将这个格式的“2015-06-11T00:00:00.000Z”添加到swift中的小时数
- 如何使用button操作(带参数)从自定义UITableViewCell中推送视图
- 播放列表(embedded式)在iOS上损坏