使用Objective-C,我们可以使用方法从ViewController将数据传输到UIView类的数组。
在UIView类中,我们使用的是这样的东西
float values[10];
-(void) getValue:(float) value index:(int) index {
values[index] = value
}
但是当我们尝试用Swift做类似的事情时,如
var values : [CGFloat] = [10]
func getValue (value:CGFloat, index:Int) {
values [index] = value
}
我们正在"致命错误:数组索引超出范围错误"或者如果我们使用
var values : [CGFloat] = [10]
var index = 0
func getValue (value:CGFloat) {
values.append = value
++index
}
我们没有收到错误消息,但每当我们使用setNeedsDisplay()时,数组值都被设置为初始值,对于此示例,该值为10。
直到现在我们无法将类似的Objective-C UIView类转换为Swift类。
答案 0 :(得分:1)
首先:
var values : [CGFloat] = [10]
该行表示values
是CGFloat值的可变数组,当前保存单个值10
。因此,实际上只存在索引0。
此外:
func getValue(value:CGFloat, index:Int) {
values [index] = value
}
别介意你把它放在UIView类上,不要紧,你有一个名为" getValue"这实际上设定了一个值......
修改强>
我找到了更好的解决方案:
var values = Array<Float>(count:10, repeatedValue: 0)
func getValue(value: Float, index: Int) {
values[index] = value
}
以上是与您在问题中发布的Objective-C代码等效的直接Swift。
坦率地说,我认为你应该退后一步,找到一种更好的方法来解决你认为这段代码正在解决的问题。就目前而言,它并没有多大意义。答案 1 :(得分:0)
var values : [CGFloat] = [10]
在swift中,这将创建一个CGFloat数组,其中包含一个元素:10.0,而不是10个元素。 所以values.count是一个
答案 2 :(得分:0)
是的,在学习了更多Swift后,我找到了问题的答案。
在UIView类中使用静态变量就是答案。
在UIView类中定义变量
struct StructToChange {
static var varToChange = 1
}
在UIView类中编写一个函数来更改变量值。
func getIt (newValue:Int) {
StructToChange.varToChange = newValue
}
以这种方式在控制器类中调用该函数
let valueChanger = AnyUIViewClass()
valueChanger.getIt ( 10 )
这是你改变了变量的值,你可以在它的&#34;中使用它作为参数。 override func drawRect(rect:CGRect){}&#34;