我有一个代码,我需要在Swift中完全运行n
次。那个最短的语法是什么?
我目前正在使用for
循环,但输入很多。
for i in 0..<n { /* do something */ }
在Swift中运行相同代码n
次是否有更短/更好的方式?
答案 0 :(得分:62)
说到语法,您可以定义自己的最短语法:
extension Int {
func times(_ f: () -> ()) {
if self > 0 {
for _ in 0..<self {
f()
}
}
}
func times(@autoclosure f: () -> ()) {
if self > 0 {
for _ in 0..<self {
f()
}
}
}
}
var s = "a"
3.times {
s.append(Character("b"))
}
s // "abbb"
var d = 3.0
5.times(d += 1.0)
d // 8.0
答案 1 :(得分:35)
坚持使用for
循环 - 您可以将Int
扩展为符合SequenceType
以便能够写入:
for i in 5 { /* Repeated five times */ }
要使Int
符合SequenceType
,您可以执行以下操作:
extension Int : SequenceType {
public func generate() -> RangeGenerator<Int> {
return (0..<self).generate()
}
}
答案 2 :(得分:21)
你有几种方法可以做到这一点:
使用for循环:
for i in 1...n { `/*code*/` }
for i = 0 ; i < n ; i++ { `/*code*/` }
for i in n { `/*code*/` }
使用while循环:
var i = 0
while (i < n) {
`/*code*/`
` i++`
}
var i = 0
repeat {
` /*code*/`
`i++`
} while(i <= n)
答案 3 :(得分:5)
for _ in 1...5 {
//action will be taken 5 times.
}
答案 4 :(得分:4)
你可以这样做:
10⨉{ print("loop") }
在Int
上使用自定义运算符和扩展名:
infix operator ⨉ // multiplication sign, not lowercase 'x'
extension Int {
static func ⨉( count:Int, block: () ->Void ) {
(0..<count).forEach { _ in block() }
}
}
答案 5 :(得分:3)
你可以在范围而不是循环上使用函数式编程,例如更短和更好的语法
(0..<n).forEach{print("Index: \($0)")}
答案 6 :(得分:2)
更短,(我认为)更清晰:
for i in 1...n { } // note: this will fail if n < 1
或
for i in n { }
答案 7 :(得分:2)
ABakerSmith的答案更新为Swift 4:
extension Int: Sequence {
public func makeIterator() -> CountableRange<Int>.Iterator {
return (0..<self).makeIterator()
}
}
使用:
for i in 5 {
//Performed 5 times
}
答案 8 :(得分:2)
这里有很多答案,着重介绍了Swift的创造力。
我需要一个数组,所以我做到了
extension Int {
func of<T>(iteration: (Int) -> T) -> [T] {
var collection = [T]()
for i in 0..<self {
collection.append(iteration(i))
}
return collection
}
}
fun strings() -> [String] {
return 4.of { "\($0) teletubby" }
}
答案 9 :(得分:1)
在Swift中,你所拥有的是用于执行循环操作的shortest syntax。
Swift提供了两种执行一组语句的循环a 一定次数:
for-in 循环为a中的每个项目执行一组语句 序列。
for 循环执行一组语句,直到特定语句 条件得到满足。
如果您想无限次地运行它,请尝试使用while
。
答案 10 :(得分:0)
唯一比这更短的循环是无限循环:
while (true) {
}
但你仍然需要增加一个计数器并在循环中检查它以打破循环,最后它不会更短。
答案 11 :(得分:0)
for循环是重复代码的常用方法。下面是使用for循环隐藏六个出口的示例,而不是为六个出口编写相同的代码。此外,如果您制作另一个插座,您只需将其添加到阵列中即可。
parser
以这样写:
>>> parser.set_defaults(check=False)
答案 12 :(得分:0)
仅5个字符(不包括n或代码)
var params = {
container: document.getElementById('lottie'),
renderer: 'svg',
loop: false,
autoplay: false,
animationData: animationData
};
var anim;
anim = lottie.loadAnimation(params);
anim.addEventListener('DOMLoaded',function() {
anim.play();
});
anim.addEventListener('complete',function() {
//anim.destroy();
// fade out code...
});
如果您只是在测试东西,并且需要很短的线,请尝试一下。强调将其用于测试而不是在生产中,因为没有文档,没人会知道发生了什么。
在全球范围内定义此
r(){}
在运行时调用它
func r(_ n : UInt, _ c: @escaping () -> Void) { for _ in 0..<n { c() } }