如何在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