#ios #swift #xcode
#iOS #swift #xcode
Вопрос:
Вот следующий код:
class settings {
static let SharedInstance = settings()
var city: String {
return self.city
}
}
прямо сейчас я могу получить доступ к этому классу из отдельного представления, подобного этому:
@IBOutlet weak var cityLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
cityLabel.text = settings.SharedInstance.city
}
но я хочу иметь возможность изменять значение city в моем settings
классе «» из другого представления.
Что-то вроде:
@IBOutlet weak var city: UITextField!
@IBAction func saveButtonClicked(_ sender: AnyObject) {
settings.SharedInstance.cityVar(city.text)
closeKeyboard()
}
Я не знаю, как отсюда добраться
Моя логика заключается в том, чтобы инициировать a setter
внутри my class
или, может быть, a function
, который принимает a string
и изменяет переменную, как я пытался сделать выше.
Обновить
Теперь я могу установить и получить название города в этом классе:
class settings {
static let SharedInstance = settings()
var city: String?
func setCity(city: String){
self.city = city
}
}
Проблема сейчас в том, что когда я обращаюсь к переменной city в моем классе «настройки» в другом представлении, она не отображает новое значение :
override func viewDidLoad() {
super.viewDidLoad()
cityLabel.text = settings.SharedInstance.city
}
Я считаю, что он не обновляет представление
Комментарии:
1. настройки класса { private var _x : Int = 0 var x : Int { set { _x = 2 * newValue } get { return _x / 2 } } } попробуйте этот способ
Ответ №1:
Если вы используете следующую строку:
var city: String {
return self.city
}
тогда у вас city
будет свойство «получить только». Я не вижу никаких причин, по которым вам нужно было бы инициализировать переменную таким образом. Пожалуйста, уточните, если да.
Я бы предложил изменить вашу переменную так, чтобы она была необязательной. Затем вы можете изменить свой класс на что-то вроде этого:
class settings {
static let SharedInstance = settings()
var city: String?
}
Тогда вам не нужно создавать инициализаторы для класса. Если вы также хотите создать метод установки в классе, тогда вы можете, например:
func setCity(city: String){
self.city = city
}
Это означает, что теперь будет работать следующий метод:
class myClass: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
cityLabel.text = settings.SharedInstance.city
settings.SharedInstance.city = cityLabel.text
}
}
Комментарии:
1. хм, ну, вы правы, нет смысла использовать его как «только для получения» — я попробовал ваш код, и он работает, ЕСЛИ я объявляю var city = «что-то», похоже, он не понимает, если я устанавливаю свой город из своего представления следующим образом: @IBAction функция saveButtonClicked(_ sender: AnyObject) { настройки. sharedInstance.setCity(город: city.text!)
2. Какую ошибку он выдает для этого кода? Я не вижу, что не так с этой реализацией.
3. никаких ошибок, что так когда-либо 🙂 Он просто ничего не делает, когда я ввожу в поле ввода и нажимаю свою кнопку.
4. Если вы отредактируете свой вопрос, чтобы он содержал соответствующий код для этого, я могу попробовать и посмотреть, что происходит не так.
5. я думаю, это потому, что он не обновляется в моем другом представлении, например. переопределить функцию viewDidLoad() { super.viewDidLoad() cityLabel.text = настройки. sharedInstance.city }