Я хотел бы назвать функцию, которая закодирована в другом классе.
До сих пор я сделал-структуру на файл structs.swift для моих данных:Вызвать func из другого класса в 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)
}
Я просто добавил (а) и работал. Я много раз пробовал, но этого не делал. Мой новый * рабочий * код: '@IBAction func saveSettings (отправитель: UIButton) { DefaultsSet(). Write (defaultCityName.text !, load: switchState) }' – nick
Рад, что вы решили свою собственную проблему. Однако для дальнейшего использования выделите строку ошибки и добавьте сообщение об ошибке. «Это не работает» слишком расплывчато для нас, чтобы помочь вам. –
В Swift имя structs должно быть заглавным, поэтому я переименовал 'defValues' в' DefValues'. Это не критично, но выглядит намного лучше. – Addison