在Swift中重复字符串

4

我被委托创建一个函数,该函数接受两个参数:一个字符串和一个整数。该函数将返回重复字符串参数指定次数的字符串。这是我想出来的代码,但是出现了错误。顺便说一下,我在工作中使用的是CodeCardio,所以我无法在Xcode中测试它(我的工作很糟糕,使用的是Windows)。

func repeater(aString: String, withNumber: Int) -> String {
    let repeatedString = String(count: withNumber, repeatedValue: aString)
    return repeatedString
}
8个回答

13
String(count: withNumber, repeatedValue: aString)

用于使用重复的字符实例化字符串:Swift init(count:, repeatedValue:)是否有效?

而应该这样做:

func repeater(string: String, withNumber number: Int) -> String {
    var repeatedString = String()
    for i in 0..<number {
        repeatedString += string
    }
    return repeatedString
}

哦,我明白为什么那个repeatedValue不起作用了。看了一下你写的函数,我没看出来为什么它不起作用,但是它也不允许这样做。它给出的错误是“意外标识符”。我刚刚得出结论,CodeCardio还没有更新到Swift 2,所以它会给我随机的错误。 - user5104686

6
从 Swift 3 开始, init(repeating:count:) 也可以使用字符串参数。
var repeatingString = String(repeating: "ab", count: 7)
print(repeatingString) // ababababababab

试试这个:

func repeater(aString: String, withNumber: Int) -> String {
    let repeatedString = String(repeating: aString, count: withNumber)
    return repeatedString
}

4
String(count: repeatedValue: aCharacter)中的参数repeatedValue的类型是单个Character而不是String
您可以使用Array(count: withNumber, repeatedValue: aString)并连接项目。
func repeater(aString: String, withNumber: UInt) -> String {
  let repeatedArray = Array(count: Int(withNumber), repeatedValue: aString)
  return repeatedArray.joinWithSeparator("")
}

谢谢你的解释!你提供的函数也返回了一个错误,但我不知道为什么会这样。我刚刚得出结论,CodeCardio还没有更新到Swift 2,所以它会给我随机的错误。 - user5104686
我相信它确实有用,我只是试图寻找在工作时练习编码的方法,但我认为这个网站还不适用于Swift。 - user5104686
@NicLaughter CodeCardio 使用 JavaScript、HTML 和 CSS :-O - user3441734
呃,那很有道理。现在只需要扇那个建议我用它来练习Swift的人一巴掌。 - user5104686
2
@NicLaughter 请尝试使用 http://iswift.org/playground 或 https://swiftlang.ng.bluemix.net/#/repl。 - user3441734
显示剩余4条评论

4
你可以这样做:
func repeater(aString string: String, withNumber number: Int) -> String {
    return [String](count: number, repeatedValue: string).reduce("", combine: +)
}

2
我稍微修改了Tanguy的回答。现在,如果第二个参数小于0,该函数不会崩溃,而是返回一个空字符串。
func repeate(string: String,  times: Int) -> String {
    var repeatedString = ""
    var n = times
    while n > 0 {
        repeatedString += string
        n -= 1
    }
    return repeatedString
}

同样的问题已经得到了Vadian的回答,检查参数并及早返回""可能是最好的解决方案。我个人更喜欢Vadian的方法。


2
我把我的答案类型改成了 UInt ;-) - vadian
@vadian :-) 太简单了...点赞!(有时混合使用 Int、UInt 等对 Swift 程序员来说是噩梦) - user3441734

1
func repeatAString(anyString: String, numberOfTimes: Int) ->String
{
    var returnString: String = String()
    for _ in 1...numberOfTimes 
    {
        returnString = returnString.stringByAppendingString(anyString)
    }
    return returnString
}

嗨,我已经使用stringByappendingString来解决这个问题。我看到你有很多答案,但没有人建议这样做,所以我想提出来。干杯!


1

Swift 5:

extension String {
    func repeater(by count: Int) -> String {
        return String(repeating: self, count: count)
    }
}

调用: "testString".repeater(by: counter)



0
func repeater(aString: String, withNumber: Int) -> String 
{
var repeatedString=""
for var index = 0; index < withNumber; ++index 
   {
     repeatedString=repeatedString+aString
   }
return repeatedString
}

我使用以下代码进行函数调用: print(repeater("String",withNumber: 5))

我也非常确定,在Swift 3中,C风格的for循环将被淘汰。 - EmilioPelaez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接