来自不同类别的特定实例的Swift引用variables

一般来说,我是Swift和iOS的新手。 我正在使用Swift编写一个应用程序。 这个应用程序有两个文件, ViewController.swiftBTService.swift

ViewController.swift有一个types为UIViewController的类ViewController ,而BTService.swift有一个NSObject类和BTService.swift类的CBPeripheralDelegate 。 我在UIViewController类中设置了一个滑块,并将其值赋给variablescurrentValue

现在,我想能够从BTService类中引用currentValue 。 我怎么能这样做? 我注意到,如果我定义了一个variables,在类UIViewController 之前的文件ViewController test ,我可以BTService引用test 。 但这对我来说是没有用的,因为我不能(据我所知)得到的滑块值被分配到testing,除非在UIViewController类中定义testing。

这是我的ViewController和currentValuevariables定义。

 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中的一个属性吗?

你可以使用关键值观察(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 } }