[英]Call a func from another class in swift
我想调用一个在另一个类上编码的函数。
到目前为止,我已经在文件structs.swift中为我的数据制作了一个结构:
struct defValues {
let defCityName: String
let loadImages: Bool
init(defCity: String, loadImgs: Bool){
self.defCityName = defCity
self.loadImages = loadImgs
}
}
我已将文件Defaults.swift制作为包含:
import Foundation
class DefaultsSet {
let cityKey: String = "default_city"
let loadKey: String = "load_imgs"
func read() -> defValues {
let defaults = NSUserDefaults.standardUserDefaults()
if let name = defaults.stringForKey(cityKey){
print(name)
let valuesToReturn = defValues(defCity: name, loadImgs: true)
return valuesToReturn
}
else {
let valuesToReturn = defValues(defCity: "No default city set", loadImgs: true)
return valuesToReturn
}
}
func write(city: String, load: Bool){
let def = NSUserDefaults.standardUserDefaults()
def.setObject(city, forKey: cityKey)
def.setBool(load, forKey: loadKey)
}
}
其中我有两个函数,分别使用NSUsersDefault读取,写入和读取数据。
在主ViewController上,我可以使用以下命令读取数据:
let loadeddata: defValues = DefaultsSet().read()
if loadeddata.defCityName == "No default city set" {
defaultCity = "London"
}
else {
defaultCity = loadeddata.defCityName
defaultLoad = loadeddata.loadImages
}
但是,当我尝试写入数据时,它给了我错误。 我使用以下代码:
@IBOutlet var settingsTable: UITableView!
@IBOutlet var defaultCityName: UITextField!
@IBOutlet var loadImgs: UISwitch!
var switchState: Bool = true
@IBAction func switchChanged(sender: UISwitch) {
if sender.on{
switchState = true
print(switchState)
}else {
switchState = false
print(switchState)
}
}
@IBAction func saveSettings(sender: UIButton) {
DefaultsSet.write(defaultCityName.text, switchState)
}
您需要一个DefaultsSet
类的实例
在视图控制器中,在类级别添加此行
var setOfDefaults = DefaultsSet()
然后阅读
let loadeddata = setOfDefaults.read()
和写
setOfDefaults.write(defaultCityName.text, switchState)
变量名称setOfDefaults
专门用于查看差异。
或将函数类的函数和变量设为静态变量,然后在类上调用函数(不带括号)
从您发布的代码,看来你要么需要使write
方法的类方法(只使用前缀class
),或者你需要调用它的一个实例DefaultsSet
: DefaultsSet().write(defaultCityName.text, switchState)
。
我发现的另一个问题是,您还需要解包textField的值。 您的write
方法将String
和Bool
作为参数,但是defaultCityName.text
的值是可选的,因此String?
。 这会导致编译器错误。
您可以尝试如下操作:
@IBAction func saveSettings(sender: UIButton) {
guard let text = defaultCityName.text else {
// the text is empty - nothing to save
return
}
DefaultsSet.write(text, switchState)
}
现在,该代码应可以编译,并让您调用方法。
让我知道这是否可以帮助您解决问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.