2014-11-20 61 views
0

使用Objective-C,我們可以使用方法將數據從ViewController傳遞到UIView類中的數組。在使用Swift編程語言時,如何在類之間傳輸數據

在UIView類,我們用這樣的

float values[10]; 

-(void) getValue:(float) value index:(int) index { 

    values[index] = value  

    } 

但是,當我們嘗試做與雨燕類似的事情,如

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 
    } 

我們沒有得到錯誤消息,但whenev呃,我們使用setNeedsDisplay()數組值被設置爲初始值,這個例子是10。

直到現在我們無法將Objective-C UIView類轉換爲Swift類。

回答

0

是,學習一些更斯威夫特之後我找到了答案,我的問題。

在UIView類中使用靜態變量是答案。

定義這樣的變量在UIView類

struct StructToChange { 

    static var varToChange = 1 

} 

編寫一個函數來改變UIView類變量值這樣的。

func getIt (newValue:Int) { 

    StructToChange.varToChange = newValue 

} 

中的呼叫控制器類的功能這樣

let valueChanger = AnyUIViewClass() 
    valueChanger.getIt (10) 

這是你改變了變量的值,你可以在你的「覆蓋用它作爲參數FUNC的drawRect(RECT:的CGRect) {}「

+0

不斷閱讀和學習。在對我的回答的評論中,你寫道,你找到了一個不使用全局變量的解決方案......上面的解決方案使用了一個全局變量。我很高興它適合你,希望有一天你能弄清楚真正的問題是什麼。 – 2014-11-24 12:28:28

+0

謝謝,但我的理解是實際上沒有問題。在Swift中,當每次調用UIView類變量時都使用正常變量時,已創建新變量,並且新變量具有默認值。即使調用一個函數來改變變量值,它也不能被改變。事實上,我在打印函數中檢查了它,它看起來像是成功地改變了,但在它之外,它又是默認值。這是與Obj-C不同的行爲。 – Hope 2014-11-24 20:08:21

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代碼。

坦率地說,我認爲你應該退後一步,找到更好的方法來解決你認爲這個代碼正在解決的問題。就目前而言,這並沒有太大的意義。

+0

你說得對,那沒有任何意義,因爲當爲類執行一個View.setNeedsDisplay()時,所有的值都將從與Obj-C相反的數組中移除,並且我們不能繪製任何東西是個問題。 – Hope 2014-11-20 21:44:01

+0

setNeedsDisplay()不會從您的數組中除去任何值,除非您顯式覆蓋該函數並將其刪除。對不起,但我想你並不真正瞭解發生了什麼,即使在最初的Obj-C代碼中也是如此。 – 2014-11-20 21:49:29

+0

祝你好運@希望不要忘記接受解決方案。 :-) – 2014-11-21 02:24:38

0
var values : [CGFloat] = [10] 

在swift中,這將創建一個包含一個元素的CGFloat數組:10.0,而不是10個元素。 所以values.count是一個

Swift Collections

相關問題