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

Я новичок в 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 } }