我來自Javascript背景,我正在尋找一些清晰的Swift inout。學習Swift - inout函數 - 爲什麼他們修改全局變量值?
在Javascript中,函數的參數只存在於該函數的範圍內。例如,我可以做到這一點沒有問題。
function greet(name) {
name = "randomDude";
return name
}
greet("Barry");
這是可行的,因爲參數名只存在於問候函數的範圍內。所以我可以改變名字的價值。
然而,斯威夫特,我不能做到這一點:
func greet(name: String) {
name = "Ardvark"
print(name)
}
greet(name: "Drew")
的解決辦法是將其更改爲「INOUT」功能,只能採取一個變量,即:
func greet(name: inout String) {
name = "Ardvark"
print(name)
}
var name = "Drew"
greet(name: name)
但是,當我這樣做時,它實際上會更改var name的值。這意味着inout函數不會修改函數範圍內的PARAMETER的值,但會修改全局變量。
這是我必須接受的嗎?是否有理由修改全局變量?你將如何修改函數greet中的變量'name'?
由於
我不太明白你的意思。在第二個代碼示例中,變量「name」也僅存在於問候函數的範圍內。爲什麼這不起作用?你不能修改參數,因爲它們默認是常量,但你爲什麼想要? –
@Lupinity參數在Swift 3中是不可變的。你不能在函數內賦給'name'一個新的值。 – rmaddy
@rmaddy:是的,但我沒有看到在那裏分配一個值的意義? –