不同类特定实例的Swift引用变量

时间:2015-03-14 03:37:29

标签: ios iphone swift uiviewcontroller

我是Swift和iOS的新手。我正在使用Swift编写应用程序。此应用有两个文件ViewController.swiftBTService.swift

ViewController.swiftViewControllerUIViewControllerBTService.swiftBTServiceNSObjectCBPeripheralDelegate }。我在UIViewController类中设置了滑块,其值已分配给变量currentValue

现在,我希望能够在currentValue课程中引用BTService。我该怎么做呢?我注意到,如果我在test之前在文件ViewController 中定义变量UIViewController,那么我可以< / em>在test中引用BTService。但是这对我没用,因为我不能(根据我的知识)将滑块值分配给test,除非在UIViewController类中定义了test。

这是我的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)

任何帮助将不胜感激!谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用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
}

答案 1 :(得分:0)

你的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
    }
}