关于字符串:Swift init(count:,repeatedValue :)是否有效?

Does Swift init(count:, repeatedValue:) work?

参考:https://developer.apple.com/documentation/swift

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

我得到这个错误:

Playground execution failed: error: :5:14: error: could not find an overload for 'init' that accepts the supplied arguments
var string = String(count: 5, repeatedValue:"a")

这真的有效吗?


似乎您必须显式地将字符类型传递给它才能运行。这对我有用。

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

尽管如此,也可能有bug与所有这些混为一谈。我相信你这样做的方式应该是独立的。我似乎根本无法在这个初始值设定项上完成代码。

编辑:我和Bug一起去。下面的汇编很好。

1
let array = Array(count: 5, repeatedValue:"a")


为了未来搜索者的利益:从Swift 3开始,使用init(repeating:count:)


这很好用:

1
var str9 = String(count: 5,repeatedValue: Character("c"))


对于任何穿Swift 3.x的人来说,现在像这样的东西会很有魅力。

1
var string = String(repeating:"a", count: 5)


斯威夫特3:

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

输出:[0,0,0,0,0]


我知道这是个老问题,已经有了答案。不过,我想我知道为什么String(count: 5, repeatedValue:"a")不起作用。

问题是,String有两个相似的初始化程序:

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

因此,在这种情况下,编译器无法判断文字是Character还是UnicodeScalar,因此,如果不传递显式Character,则编译时错误。为了确认"a"可以解释为UnicodeScalar,您可以检查此行是否编译:

1
let a: UnicodeScalar ="a"