我想调用一个在另一个类上编码的函数 到目前为止,我已经在文件 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)
}
答案 0 :(得分:0)
您需要DefaultsSet
类
在视图控制器中,在类级别添加此行
var setOfDefaults = DefaultsSet()
然后阅读
let loadeddata = setOfDefaults.read()
并写
setOfDefaults.write(defaultCityName.text, switchState)
变量名setOfDefaults
是为了看到差异。
或者使函数类函数和变量静态变量并调用类上的函数(不带括号)
答案 1 :(得分:0)
从您发布的代码中,您似乎需要将write
方法设为类方法(只需在其前加class
),或者需要在{{1}的实例上调用它}:DefaultsSet
。
我发现的另一个问题是你还需要解开textField的值。您的DefaultsSet().write(defaultCityName.text, switchState)
方法将write
和String
作为参数,但Bool
的值是可选的,因此defaultCityName.text
。这会导致编译器错误。
您可以尝试这样的事情:
String?
此代码现在应该编译并让您调用您的方法。
让我知道它是否有助于您解决问题