试图用 swift 中的变量切换直接整数值

Posted

技术标签:

【中文标题】试图用 swift 中的变量切换直接整数值【英文标题】:Trying to switch a direct integer value with a variable in swift 【发布时间】:2014-11-30 01:06:32 【问题描述】:

我正在尝试用 swift 中的变量切换直接整数,但由于某种原因,我收到了这个错误,我不知道。 最终目标是让我的 currentValue(第 76 行)替换第 41 行上的 100 - 谁能告诉我如何在没有错误的情况下完成此操作? swift 新手,遇到困难(objective-c 的背景,想出这么简单的东西不会阻止我的前进!)

完整的 .swift 文件在这里:http://pastebin.com/K6UHkNEv

编辑:

// these values change the number of squares
let _gameView = CGOLView(gridWidth:100, gridHeight:100)

@IBOutlet weak var tileSizeSlider: UISlider!
@IBAction func sliderValueChanged(sender: UISlider) 
    var currentValue = Int(sender.value)
    print("\(currentValue)")

应该是:

// these values change the number of squares
let _gameView = CGOLView(gridWidth:currentValue, gridHeight:currentValue)

@IBOutlet weak var tileSizeSlider: UISlider!
@IBAction func sliderValueChanged(sender: UISlider) 
    var currentValue = Int(sender.value)
    print("\(currentValue)")

我得到了这个错误:

使用未解析的标识符“currentValue”

如果我尝试创建自定义 int 并输入它们:

   var gridWidthValue = 50
   var gridHeightValue = 50

像这样:

let _gameView = CGOLView(gridWidth:gridWidthValue, gridHeight:gridHeightValue)

我明白了:

“ViewController.Type”没有名为“gridHeightValue”的成员

任何帮助将不胜感激 - 感谢 *** 社区!

大卫。

【问题讨论】:

通过复制/粘贴将代码添加到问题中,而不是在链接中。只是导致错误的行和完整的错误消息。 @Zaph 不敢相信我居然忘了添加实际的错误和代码——我很抱歉!已编辑。 【参考方案1】:

currentValue 是sliderValueChanged 的​​局部变量。

相反,您应该在 init 中实例化 _gameView。但请注意,您仍然无法使用 currentValue。

如果这是一次性的事情,您可以随时将 _gameView 设为可选,然后在调整滑块后创建它。诚然,这有点笨拙。

我对Conway的Game of Life不熟悉,但是看代码,CGOLView的init好像是根据grid的宽高做了一些调整。我提到这一点的原因是您可以随时更改视图的框架大小,但是,您还需要对 tileViews 进行一些其他修改以使其看起来正确。

至于为什么 gridWidthValue/gridHeightValue 不起作用。这些是在实例中定义的属性。因此,您需要执行 self.gridWithValue 之类的操作来引用它。但是,在定义诸如

之类的属性时,您不能这样做
let _gameView = CGOLView(gridWidth:gridWidthValue, gridHeight:gridHeightValue)

这也是为什么在 init 中实例化 _gameView 是可行的方法。

【讨论】:

谢谢。我将自定义变量移到了类之外并且它们起作用了,所以这让我相信,如果我可以访问卡在方法中的 currentValue,我将能够做我需要做的事情。如果可能的话,你能推荐我如何从括号外访问 currentValue 的值吗?干杯,感谢您的时间和解释! 您可以创建一个具有默认初始值的属性,执行类似 var currentValue:Int = 50 之类的操作。尽管最好将其命名为 gridValue,以便更清楚它是什么。此外,这意味着您需要决定如何调整视图框架大小。您可以实例化一个新视图,但这意味着删除/添加视图,并且可能会根据其他视图产生副作用。或者您可以在 CGOLView 上添加一个扩展来更改将正确处理调整大小的帧大小。后者可能是要走的路。 在@Mobile 上摇滚!我决定这样做,并且效果很好 - 可以从任何地方访问的全局属性获取 currentValue 并将其输入到它接受大小整数的区域中。现在,使用滚动时视图不会更新,显然我需要视图在值更改时“刷新”或“更新”(如您所建议的那样)。我真的太新了,无法自己编写任何代码 - 你有什么办法可以给我更多关于扩展想法的解释吗?【参考方案2】:

您的问题是您无法访问变量 currentValue,因为它位于函数内部。您必须在函数外部声明该值才能在函数外部使用它。

【讨论】:

我可能可以解决这个问题,但我担心的问题是,当我创建自定义变量(请参阅我的问题的第二部分)时,出现了其他错误,这让我相信它赢了'无论如何都不接受变量。

以上是关于试图用 swift 中的变量切换直接整数值的主要内容,如果未能解决你的问题,请参考以下文章

在 struct.unpack 格式字符串中间切换字节顺序

在 Swift 中使用 JSON 解码器难以解析 JSON 中的整数值

怎么把文字的全角符号切换成半角

两个变量,不用第三个数就进行切换数值

关于swift中的常量和变量

Swift 支持某个页面横竖屏切换与强制横屏