如何在swift 3.0中編寫此代碼。使用For循環?如何在swift 3.0中編寫此代碼。使用For循環
for (int index = 0; index < 100; index += (1 + index)) {
printf("%d\t",index);
}
如何在swift 3.0中編寫此代碼。使用For循環?如何在swift 3.0中編寫此代碼。使用For循環
for (int index = 0; index < 100; index += (1 + index)) {
printf("%d\t",index);
}
您的增量正在增加。由於C風格的for循環不可用,您可能會使用這樣的代碼:
var index = 0
while index < 100 {
print("\(index)", terminator: "\t")
index += 1 + index
}
print("")
你也可以寫函數式的代碼:
for f in sequence(first: 0,
next: {
$0 + $0 + 1
})
.prefix(while: {$0 < last}) {
print(f, terminator: "\t")
}
print("")
(前綴功能需要雨燕3.1 )
Up投票正確翻譯,包括使用終止符打印。 – vacawama
這種for
循環來自C,與Swift語言的設計和精神背道而馳。這就是爲什麼它在Swift 3中被淘汰的原因(你可以找到更多關於它的移除here)。
C風格的for循環有三種說法:
首先,有個初始化語句,,您可以設置一個或多個變量。在這種情況下,初始化語句是:
int index = 0
這斯威夫特成爲
var index = 0
然後,還有的循環不變,這是必須在一開始和結束滿足的條件每次通過循環。在這種情況下,循環不變是:
index < 100
Swift代碼與C代碼非常相似。
最後,我將其稱爲更改語句,它會更改循環中的某些條件,需要對其進行評估,以確定是否需要通過循環創建另一個通道。在這種情況下,它的這種說法:
index += 1 + index
同樣,斯威夫特代碼幾乎是相同的C代碼。
你應該使用while循環,以及等效斯威夫特代碼如下所示:
while index < 100 {
print("\(index)\t")
index += 1 + index
}
的index += 1 + index
代碼,而有效的,是不尋常的。你確定你想要嗎?還是你想要更常見的index += 1
?
好,清晰,一步一步的答案。一個小點雖然。 C'printf()'函數不會終止該行,默認情況下Swift的'print()'函數會執行該行。在我的回答中,我提供了可選的終止符參數,該參數用標籤替換正常的換行符。您的代碼將在循環中顯示一個新行,這與提供的C代碼不同。 –
如果你必須使用一個for循環,你可以使用一個序列,但是這將是比while循環更詳細和繁瑣:
for index in sequence(first:0, next:{ let index = $0 + $0 + 1; return index < 100 ? index : nil})
{
print("\(index)")
}
你也可以使用一個通用的概括這對任何類型和增量功能:
func cFor<T>(_ start:T, _ condition:@escaping (T)->Bool, _ increment:@escaping (inout T)->()) -> UnfoldSequence<T, (T?, Bool)>
{
return sequence(first:start, next:{ var next = $0; increment(&next); return condition(next) ? next : nil })
}
for index in cFor(0,{$0<100},{$0 += $0 + 1})
{
print("\(index)")
}
該代碼似乎毫無意義。 這將產生奇怪的結果。 Swift不再具有C風格的for(;;)'構造,因此您必須使用while循環來構建它。 這聽起來像是給我的家庭作業。是嗎? –
相關:http://stackoverflow.com/a/42662061/1630618 – vacawama