2014-08-27 44 views
3

在雨燕,它是一個編譯錯誤,要做到這一點:你應該能夠在具有相同名稱的不同文件中聲明兩個私有變量嗎?

// file1.swift 

private let testVar = 2 

// file2.swift 

private let testVar = 3 

特別是,聲明人會用「的testvar的無效重複聲明」強調。


documentation狀態,一般認爲:

私人接入限制使用的實體自身的定義源文件。使用私人訪問來隱藏特定功能的實現細節。

在討論原始值,它說:

在枚舉定義用於任何原始值或相關值類型必須具有的訪問級別至少高達枚舉的訪問級別。例如,不能將私有類型用作具有內部訪問級別的枚舉的原始值類型。

並相對於常量:

常量,變量或屬性不能比它的類型的詳細公開。例如,編寫具有私有類型的公共屬性是無效的。同樣,下標不能比其索引類型或返回類型更公開。


對我來說,沒有這些提取物的建議,你不應該能夠有private變量在不同的文件相同的名稱。

的確,第一句話對我說,你應該能夠;否則,您正在泄漏實現細節(即,您使用名爲testVar的變量)。


在我提交錯誤報告之前,我想檢查一下,我沒有誤解語義。 這應該可能嗎?

+1

似乎這個裹屍布是不允許的。只是在一個不同的文件是不夠的。考慮鏈接時間。 – zaph 2014-08-27 12:27:56

+1

@Zaph我認爲它的工作方式與C中的靜態變量相同(即不暴露給鏈接器)。看起來很奇怪,你可以通過向項目添加一個新文件來打破你的構建! – sapi 2014-08-27 12:43:37

+0

我想這涉及私人處理。提交bug並查看響應是什麼。 – zaph 2014-08-27 12:49:11

回答

2

這已被固定在Xcode 6.1的β2:

問題在Xcode 6解決。1個測試版

斯威夫特語言

具有相同的名稱和相同類型的私人實體會如果不同的文件中定義的同一模塊內不再衝突。 (17632175)

0

雨燕文檔狀態:

默認情況下,變量,常量和其他命名的聲明是在源文件中的頂級聲明是代碼訪問在每一個源文件的一部分相同的模塊。

您需要將文件放在不同的模塊中,或者在一個類中定義變量的範圍。

+0

但它*還*規定'私人訪問限制了一個實體對其自己的定義源文件的使用,並且通常具體將覆蓋一般作爲構造的問題,尤其是當你發佈的內容被表示爲默認規則。 – sapi 2014-09-04 22:07:52

+0

你是對的 - 他們不符合規範 – 2014-09-06 15:55:26

相關問題