来自不同类别的特定实例的Swift引用variables
一般来说,我是Swift和iOS的新手。 我正在使用Swift编写一个应用程序。 这个应用程序有两个文件, ViewController.swift
和BTService.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 } }