回答:
他の回答で述べたように、Swift 3以降、変数が廃止される前にvarが配置されます。他の回答では述べられていませんが、inout
パラメーターを宣言する機能があります。考えてみてください:ポインターを渡す。
func reduceToZero(_ x: inout Int) {
while (x != 0) {
x = x-1
}
}
var a = 3
reduceToZero(&a)
print(a) // will print '0'
これは、再帰で特に役立ちます。
Appleのinout
宣言ガイドラインはここにあります。
inout
キーワードは、パラメーター名とパラメータータイプの間に次のように配置する必要があります:func reduceToZero(x: inout Int)
現在のSwift 3バージョン。
'var'パラメータは廃止予定であり、Swift 3で削除される予定です。そのため、新しいパラメータへの割り当ては今のところ最良の方法のようです:
func reduceToZero(x:Int) -> Int {
var x = x
while (x != 0) {
x = x-1
}
return x
}
ここで述べたように:'var'パラメータは非推奨であり、Swift 3で削除されます
x
新しいに実際にコピーされvar x
ますか?それともSwiftはそれよりも効率的なことをしていますか?
x
レジスターに収まる)、実質的に費用はかかりません。場合x
、配列、構造体、または変異されたオブジェクトであり、その後、ほぼ確実にコピー(オプティマイザはそれをインラインでそれを分析し、エイリアスができない場合)に実行される必要があります。
var
esを使用inout
するよりも、argsを置き換える方が適切です。varがポインタの場合。
Swift 1と2の場合(Swift 3の場合は、inoutパラメーターを使用したachiの回答を参照):Swiftの関数の引数はlet
デフォルトであるのでvar
、値を変更する必要がある場合はに変更します。
func reduceToZero(var x:Int) -> Int {
while (x != 0) {
x = x-1
}
return x
}
var
、github.com
可変配列ポインターを渡すためのSwift3回答。
関数:
func foo(array: inout Array<Int>) {
array.append(1)
}
関数の呼び出し:
var a = Array<Int>()
foo(array:&a)
Swift var
では、関数宣言の変数名の前にキーワードを追加するだけです。
func reduceToZero(var x:Int) -> Int { // notice the "var" keyword
while (x != 0) {
x = x-1
}
return x
}
Swiftブック(現在のiBookの210ページ)の「関数」の章にある「定数と変数のパラメーター」のサブセクションを参照してください。