gpt4 book ai didi

xcode - 在不公开其类和相关功能的情况下创建一个公共(public)变量?

转载 作者:行者123 更新时间:2023-11-28 05:28:41 25 4
gpt4 key购买 nike

我开始学习 Swift。

我有一个 viewController,它有一个需要从外部 viewController 更新的 var。所以我在它的声明中添加了 public 但我的代码不会编译,因为我的类是内部的(默认情况下)。所以我公开了我的类(class),但随后它迫使我公开了我的类(class)中的所有功能,包括 viewDidLoad、tableView 数据源和委托(delegate)方法。我究竟做错了什么?我不希望任何其他人调用我的 Controller 的 viewDidLoad。

我只想让 viewControllerA 访问 viewControllerB 中的 var,而不会将 viewControllerB 中的每个函数都暴露给外界。

在 ObjC 中,这可以通过在头文件中将属性标记为只读并在实现中标记为可读来轻松实现。在这种情况下,我会将属性放在头文件中,以便它可以从外部读写。

伪代码

    class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var myTitle: NSString?

override func viewDidLoad() {
super.viewDidLoad()
}
}

//objC部分

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
myViewController.myTitle = @""; // not available

现在如果我将 myTitle 设为公共(public)变量,我会收到此错误

Declaring a public var for an internal class

所以我将 MyViewController 设为公共(public)类。

现在我得到一堆错误

Method 'tableView(_:numberOfRowsInSection:)' must be declared public because it matches a requirement in public protocol 'UITableViewDataSource'

最佳答案

你可以制定一个协议(protocol)来跨 View Controller 保存和访问数据。这是一种方法。

// Make a custom protocol delegate with a method to store the variable. In this case I'll store a boolean.
protocol storeViewControllerBVariableDelegate {
func storeVariable(data: Bool?)
}

// In your view controller A, assign your custom protocol delegate to it and add the new delegate method.
class viewControllerA: UIViewController, storeViewControllerBVariableDelegate {

func storeVariable(data: Bool?) {
self.variableName = data
}

}

// In your view controller A's prepare for segue, assign the stored variable to view controller B if you wanted to pass it forward and backward between view controllers.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

let viewControllerB = segue.destinationViewController as! viewControllerB

viewControllerB.variableName = variableName
}

// In your view controller B, initialize a variable and assign it to the delegate.
class viewControllerB: UIViewController {

var variableName: Bool!
var delegate: storeViewControllerBVariableDelegate?

// However you want to save the variable in view controller B, you can do so in an IBAction, viewDidLoad, etc.
@IBAction func saveVariable(sender: UIButton) {
delegate?.storeVariable(self.variableName)
}
}

关于xcode - 在不公开其类和相关功能的情况下创建一个公共(public)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881363/

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