0
我在這裏發佈我的第一條消息,我有一個關於swift語言的邏輯問題。爲了您的信息,我在swift語言中很新,我用C++編寫代碼,如果你有一個客觀的觀點來看待如何正確地做事情(以一種優雅的方式),如果你有一些建議,請隨時做你的建議。變量'xxx'從未突變;在派生類
我用下面的超做一個自制的封裝:
class MultiLevel_encapsulation {
var separator = "";
var datas:[String:String] = [:]
func wrap() -> String{
var out:String = ""
var i = 0
for (key, data) in datas{
if i==0{
out += key + separator + data
}
else{
out += separator + key + separator + data
}
i+=1
}
return out
}
func unwrap(content:String){
let split = content.components(separatedBy: separator)
var i = 1
while(i < split.count){
datas[split[i-1]] = split[i]
i += 2
}
}
func getAttributesNames() -> [String]{
var out:[String] = []
for (key, _) in datas{
out.append(key)
}
return out
}
func getValue(name:String) -> String? {
return datas[name];
}
func setValue(name:String, value:String){
datas[name] = value;
}
}
,我想創造一些子類包括超類,我只是改變取決於子類名的分隔符:
class Level5_encapsulation: MultiLevel_encapsulation{
init(message:String) {
super.init()
separator = "&&LEVEL5&&"
unwrap(content:message)
}
override init() {
super.init()
separator = "&&LEVEL5&&"
}
}
因此,我只需要在我的程序中創建子類作爲var,添加值並將其包裝爲具有封裝字符串:
var l5message = Level5_encapsulation()
l5message.setValue(name: #anyTitle#, value: #anyValue#)
var output = l5message.wrap() // String with encapsulated message
您認爲這是正確的方式嗎?還是有更好的方法呢?
我的主要問題是關於這個編譯器警告:
Variable 'l5message' was never mutated; consider changing to 'let' constant
我改變了它的一個讓和它的作品。
所以有一些我不明白:爲什麼我可以改變超類的屬性,就好像繼承的子類被聲明爲常量?超類的存儲在哪裏?它是如何工作的?