从结构访问 UITabBarController 中的数据模型
Accessing Data Model in UITabBarController from a Struct
我有一个使用 UITabBarController
的应用程序,我有一个用于在各个选项卡之间传递信息的模型
class BaseTBController: UITabBarController {
var title: String = ""
var valueData = Double()
override func viewDidLoad() {
super.viewDidLoad()
}
通常在 TabBars 的任何选项卡中,我可以这样做:
let tabbar = tabBarController as! BaseTBController
let valueData = Int(tabbar.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tabbar.valueData)
现在,我的情况是这样的,我想在辅助函数中使用 Tabbar 模型数据中的数据(作为结构)
这样做,不行。想知道是否有办法做到这一点,但我的 googling/SO 搜索技能达不到标准。 TX
struct DataFieldOptions{
static func showValueAs() -> String {
let tabbar = tabBarController as! BaseTBController
let valueData = Int(tabbar.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tabbar.valueData)
return String(valueData)
}
这似乎有点奇怪。如果你要添加一个“助手”,我希望你有一个 data-manager class 而不是在标签栏控制器中使用 var。
但是,tabBarController
是视图控制器的可选 属性。如果您想从视图控制器外部访问它,您需要给它一个引用。
附带说明一下,您显示的是 -> String
但返回的是 Int
...我猜您真的打算将值格式化为string 以某种方式,所以这是返回字符串的方法:
struct DataFieldOptions{
static func showValueAs(vcRef vc: UIViewController) -> String {
// safely make sure we have access to a tabBarController
// AND that it is actually a BaseTBController
if let tbc = vc.tabBarController as? BaseTBController {
let v = Int(tbc.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tbc.valueData)
return "\(v)"
}
return ""
}
}
然后,从视图控制器中,您可以这样称呼它:
let str = DataFieldOptions.showValueAs(vcRef: self)
我有一个使用 UITabBarController
的应用程序,我有一个用于在各个选项卡之间传递信息的模型
class BaseTBController: UITabBarController {
var title: String = ""
var valueData = Double()
override func viewDidLoad() {
super.viewDidLoad()
}
通常在 TabBars 的任何选项卡中,我可以这样做:
let tabbar = tabBarController as! BaseTBController
let valueData = Int(tabbar.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tabbar.valueData)
现在,我的情况是这样的,我想在辅助函数中使用 Tabbar 模型数据中的数据(作为结构)
这样做,不行。想知道是否有办法做到这一点,但我的 googling/SO 搜索技能达不到标准。 TX
struct DataFieldOptions{
static func showValueAs() -> String {
let tabbar = tabBarController as! BaseTBController
let valueData = Int(tabbar.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tabbar.valueData)
return String(valueData)
}
这似乎有点奇怪。如果你要添加一个“助手”,我希望你有一个 data-manager class 而不是在标签栏控制器中使用 var。
但是,tabBarController
是视图控制器的可选 属性。如果您想从视图控制器外部访问它,您需要给它一个引用。
附带说明一下,您显示的是 -> String
但返回的是 Int
...我猜您真的打算将值格式化为string 以某种方式,所以这是返回字符串的方法:
struct DataFieldOptions{
static func showValueAs(vcRef vc: UIViewController) -> String {
// safely make sure we have access to a tabBarController
// AND that it is actually a BaseTBController
if let tbc = vc.tabBarController as? BaseTBController {
let v = Int(tbc.valueData) == 0 ? Int(UserDefaults.standard.double(forKey: UDKeys.valueData)) : Int(tbc.valueData)
return "\(v)"
}
return ""
}
}
然后,从视图控制器中,您可以这样称呼它:
let str = DataFieldOptions.showValueAs(vcRef: self)