当使用swift编程语言时,我们如何在类之间传输数据

时间:2014-11-20 20:58:03

标签: swift class data-transfer

使用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类。

3 个答案:

答案 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是一个

Swift Collections

答案 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;