2016-02-19 2 views
0

Мне поручено создать функцию, которая принимает два параметра строки и int, которые возвратят строку, которая повторяет строковый параметр числа int. Это то, что я придумал, но получив ошибку. Кстати, это на CodeCardio, что я делаю на работе, так что я не был в состоянии проверить его в Xcode (моя работа сосет и использует Windows,)Повторяющаяся строка в Swift

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

ответ

3
String(count: withNumber, repeatedValue: aString) 

Используется для создания экземпляра строки с повторил характер: Does Swift init(count:, repeatedValue:) work?

Вместо делать

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

О, я вижу, как это repeatedValue не будет работать тогда. Рассматривая функцию, которую вы ставите, я не понимаю, почему это не сработает, но это также не позволяет. Ошибка, которую он дает, - это «неожиданный идентификатор». Я только что пришел к выводу, что CodeCardio не обновляется с Swift 2, но поэтому он дает мне случайные ошибки. –

2

тип аргумента repeatedValue из String(count: repeatedValue: aCharacter) является одной 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("") 
} 
+0

Спасибо за объяснение! Функция, которую вы положили, также возвращает ошибку, но я не понимаю, почему это произойдет. Я только что пришел к выводу, что CodeCardio не обновляется с Swift 2, но поэтому он дает мне случайные ошибки. –

+0

Функция прекрасно работает на игровой площадке – vadian

+0

Я уверен, что это так, я просто пытаюсь найти способы практиковать кодирование во время работы, но я не думаю, что этот сайт будет работать только для Swift. –

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

для вызова функции я использую: печати (повторитель ("String", withNumber: 5))

+0

Я также уверен, что C-стиль для взглядов уходит в Swift 3 – EmilioPelaez

1

Я немного изменить Танги-х ответ. Теперь эта функция не будет врезаться, если второй параметр меньше 0, но возвращается пустая строка

func repeate(string: String, times: Int) -> String { 
    var repeatedString = "" 
    var n = times 
    while n > 0 { 
     repeatedString += string 
     n -= 1 
    } 
    return repeatedString 
} 

тот же вопрос есть ответ Vadian, в проверке параметров и возвращение рано с «», вероятно, является лучшим решением. Я лично предпочитаю подход Вадиан.

+2

Я изменил тип в своем ответе на 'UInt'; -) – vadian

+0

@vadian :-) так просто ... upvoted! (иногда смешивание Int, UInt и т. д. - кошмар для программиста Swift) – user3441734

+0

Простой и элегантный, спасибо за вклад! –

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

Привет, Я использовал stringByappendingString, чтобы решить эту проблему. Я вижу, что у вас много ответов, но никто не предложил, чтобы так думал Id. Ура!

1

Вы можете просто сделать это:

func repeater(aString string: String, withNumber number: Int) -> String { 
    return [String](count: number, repeatedValue: string).reduce("", combine: +) 
} 
+0

Очень элегантный, congrats. –

Смежные вопросы