[英]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.