Intereting Posts
Видео прекращают загрузку в ячейке UITableView в AVPlayerController после прокрутки таблицы Как я могу добавить панель навигации для представленияModalViewController программно? Измените метод setride и получите «Локальное объявление xxx скрывает переменную экземпляра» Быстрое отражение метода во время выполнения как добавить двойные кавычки после символа '=' в nsstring? Чтение глобальной переменной, которая непрерывно записывается Несколько анимаций CALayer Выполнено в одно и то же время Как распространять сторонние приложения для iOS, созданные с помощью Adobe Air внутри компании Именование правил для селекторных методов распознавателей жестов? UIAutomation – проверьте сообщение в поле «Предупреждение» и сравните его с ожидаемым сообщением Тестирование iOS поддельного подкласса с помощью свойств с помощью киви Лучшая практика Realm для достижения каскадного удаления Как работает PFUser currentUser на WatchOS 2? Есть ли универсальное решение для прокрутки UITextView и UITextField над клавиатурой на экране Не удалось получить доступ к изображению с xcassets

Быстрая ссылочная переменная от конкретного экземпляра разного класса

Я новичок в Swift и iOS в целом. Я использую Swift для написания приложения. Это приложение имеет два файла: ViewController.swift и BTService.swift .

ViewController.swift имеет класс ViewController типа UIViewController , а BTService.swift – класс BTService типов CBPeripheralDelegate и CBPeripheralDelegate . У меня есть ползунок, установленный в классе UIViewController , и его значение присваивается переменной currentValue .

Теперь я хочу иметь возможность ссылаться на BTService класса BTService . Как я могу это сделать? Я заметил, что если я определяю переменную, test , в файле ViewController перед классом UIViewController , то я могу ссылаться на test в BTService . Но это бесполезно для меня, поскольку я не могу (насколько мне известно) получить значение ползунка для тестирования, если тест не определен в классе UIViewController .

Вот мой параметр ViewController и currentValue.

 class ViewController: UIViewController { @IBOutlet var positionLabel: UILabel! @IBOutlet var positionSlider: UISlider! @IBOutlet var connectionLabel: UILabel! @IBAction func sliderValChanged(sender: UISlider) { var currentValue = Float(positionSlider.value) 

Любая помощь будет принята с благодарностью! Благодарю.

Вы можете использовать NSUserDefaults для хранения данных в вашем приложении и обмена ими между контроллерами представлений.

В приведенном примере вы можете сохранить его следующим образом:

 let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() defaults.setFloat(Float(positionSlider.value), forKey: "sliderValue") // Write to NSUserDefaults defaults.synchronize() 

Затем, когда вам нужен доступ к нему в другом файле (или в этом), вы можете просто вызвать floatForKey :

 if let currentValue: Float = defaults.floatForKey("sliderValue") { // Access slider value } else { // Probably not saved } 

Является ли ваша BTService собственностью в UIViewController?

Не могли бы вы использовать Key Value Observing (KVO)

Внутри вашего UIViewController

 override func viewDidLoad() { self.addObserver(self, forKeyPath: "positionSlider.value", options: .New, context: nil) } deinit() { self.removeObserver(self, forKeyPath: "positionSlider.value") } override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { if keyPath == "positionSlider.value" { // update service property } }