Swift - 在另一个函数中使用来自 UISlider IBAction 的值

Posted

技术标签:

【中文标题】Swift - 在另一个函数中使用来自 UISlider IBAction 的值【英文标题】:Swift - Using value from UISlider IBAction in another function 【发布时间】:2015-08-08 18:41:11 【问题描述】:

这是一个困扰我的超级基本问题。

我有一个 UIslider IBAction 正在生成一个 Double (var = rounded)。我想在 viewDidLoad 中使用这个 double。但收到错误“Use of unresolved identifier 'rounded'

@IBAction func sliderValueChanged(sender: UISlider) 
    var currentValue = Double(sender.value)
    var rounded = Double(round(100*currentValue)/100)
    label.text = "\(rounded)"



override func viewDidLoad() 
    super.viewDidLoad()
    let fileURL = NSBundle.mainBundle().URLForResource("puppy", withExtension: "jpg")
    let beginImage = CIImage(contentsOfURL: fileURL)
    let filter = CIFilter(name: "CISepiaTone")
    filter.setValue(beginImage, forKey: kCIInputImageKey)
    filter.setValue(rounded, forKey: kCIInputIntensityKey)
    let newImage = UIImage(CIImage: filter.outputImage)
    self.imageView.image = newImage

filter.setValue(rounded, forKey: kCIInputIntensityKey) 是我得到错误的地方。我想在这里使用滑块函数中的“舍入”变量。

非常感谢在另一个函数中使用一个函数中的一个变量的任何帮助。我遇到过几次都没有成功。因此,一旦你们都在这里帮助我,它也应该可以解决我的其他问题。

谢谢

【问题讨论】:

我认为您缺乏基本概念:i)舍入变量不是类变量,因此只能在定义它的函数中访问。 ii) 即使它是一个类变量,也不会在 viewDidLoad 访问该变量,因为该函数在设置 rounded 值之前调用。 感谢您的意见!确实缺乏基本概念。但仍在学习。所以我最终会得到它:-) - 你将如何修复我的代码以实现我正在寻找的结果? 【参考方案1】:

    在类的开头(在任何方法之外)声明一个实例变量,默认值为UISlider

    var rounded : Double = <defaultValueOfTheSlider>
    

    删除sliderValueChanged()rounded之前的关键字var

【讨论】:

感谢您的帮助!我们越来越近了,但舍入仍然对 viewdidload 内部的 filter.setValue(rounded, forKey: kCIInputIntensityKey) 没有影响。 正如 Shoaib 提到的那样,viewDidLoad() 很早就被调用了——无论如何都在sliderValueChanged() 之前,所以你也必须在sliderValueChanged() 方法中更改过滤器设置 理论上,我现在知道为什么它没有按预期工作(感谢所有帮助我的人!)我在 viewDidLoad 中创建了所有代码的函数,我正在调用它在滑块值更改中。它可以工作,但是效率极低,因为每次滑块移动时它都会设置 fileURL / beginImage / newImage 。我只是不知道如何调整代码,所以它只会影响过滤器设置。任何代码 sn-ps 将不胜感激!【参考方案2】:

一些可以帮助您的概念。 您遇到的问题是您正在函数内创建一个实例,并且在函数返回时它会丢失。这样做的原因是函数数据是在堆栈上创建的,stack 是您的应用程序进程使用的临时内存。

要在整个类中访问变量,您可以在类的顶部声明它。然后将其分配给heap,以便以后访问,直到从堆中删除(解除分配)。

【讨论】:

以上是关于Swift - 在另一个函数中使用来自 UISlider IBAction 的值的主要内容,如果未能解决你的问题,请参考以下文章

我如何在另一个函数中使用retailId(来自flatMapLatest)

无法在另一个 python 脚本中使用来自 python 函数的属性

在另一个函数中添加来自 MySQL 函数的两个输出的问题

不能在另一个文件中使用函数

在另一个 Swift 项目中使用自定义 Swift 框架

如何使用来自另一个视图控制器swift的用户输入创建具有表视图单元格的列表