Выполняется ли Swift init (count:, repeatValue:)?

Протестировано это из ссылки: https://developer.apple.com/documentation/swift

var string = String(count: 5, repeatedValue: "a")
// string is "aaaaa"

Я получил эту ошибку:

Выполнение игровой площадки не выполнено: ошибка:: 5: 14: ошибка: не удалось найти перегрузку для 'init', которая принимает предоставленные аргументы var string = String (count: 5, repeatValue: "a" )

Это действительно работает?

+19
источник поделиться
6 ответов

Кажется, что вам нужно явно передать тип символа, чтобы он функционировал. Это работает для меня.

let char = Character("a")
let string = String(count: 5, repeatedValue: char)

Хотя, возможно, ошибка со смехом со всем этим. Я считаю, что то, как вы делали это, должно было работать само по себе. И я никак не могу получить завершение кода в этом инициализаторе.

Изменить: я собираюсь с ошибкой. Следующие компилируются просто отлично.

let array = Array(count: 5, repeatedValue: "a")
+25
источник

В интересах будущих искателей: с Swift 3 используйте init(repeating:count:).

+7
источник

Это прекрасно работает:

var str9 = String(count: 5,repeatedValue: Character("c"))
+6
источник

Для всех, кто в swift 3.x, теперь что-то вроде этого будет работать как шарм.

var string = String(repeating: "a", count: 5)
+1
источник

Я знаю, что это старый вопрос и уже есть ответ. Однако я думаю, что знаю , почему String(count: 5, repeatedValue: "a") не работает.

Вещь String имеет два похожих вида initialisers:

init(count: Int, repeatedValue: Character)
init(count: Int, repeatedValue: UnicodeScalar)

Итак, в этом случае компилятор не может определить, является ли литерал Character или UnicodeScalar, поэтому компилируйте временную ошибку, если вы не передаете явный Character. Чтобы подтвердить, что "a" можно интерпретировать как UnicodeScalar, вы можете проверить, что эта строка компилируется:

let a: UnicodeScalar = "a"
0
источник

Swift 3:

var array = Array(repeating: 0, count: 5)

Выход: [0, 0, 0, 0, 0]

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос