在Swift中运行相同代码n次的最短方法是什么?

时间:2015-05-31 04:56:55

标签: swift

我有一个代码,我需要在Swift中完全运行n次。那个最短的语法是什么?

我目前正在使用for循环,但输入很多。

for i in 0..<n { /* do something */ }

在Swift中运行相同代码n次是否有更短/更好的方式?

13 个答案:

答案 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() } }