gpt4 book ai didi

ios - 在 Swift 中为 Controller 属性赋值

转载 作者:搜寻专家 更新时间:2023-10-31 08:27:56 24 4
gpt4 key购买 nike

我试图在 Swift 中的 View 之间传递一个 int 变量,但我不确定如何访问其他 View Controller 的属性。

在 Objective C 中我会做这样的事情

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)

在另一个 View Controller 的另一个 .swift 文件中我声明了 num

let num: int

我很确定这不是正确的方法,因为我在这一行遇到错误

ansViewController.num = theNum;

它说,“UIViewController 没有名为 num 的成员”我该如何解决这个错误以及我做错了什么?

谢谢

最佳答案

问题

在 Objective C 中,您已将 ansViewController 显式定义为 AnsViewController*,它具有属性 num。

不过,在您的 Swift 代码中,您已明确将 ansViewController 定义为 UIViewController,而不是 AnsViewController。因此,编译器不知道这实际上是一个 AnsViewController 还是其他 UIViewController 子类,或者只是一个普通的 UIViewController。

现在是解决方案。

我们将尝试将返回值向下转换为 AnsViewController,然后在向下转换成功时访问该属性(我假设它总是会,但与您的其余代码和 nib 无关,我不能确定)。

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)

关于ios - 在 Swift 中为 Controller 属性赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com