【问题标题】:Does Swift init(count:, repeatedValue:) work?Swift init(count:, repeatValue:) 有效吗?
【发布时间】:2014-08-19 05:34:58
【问题描述】:

从参考中对此进行了测试:https://developer.apple.com/documentation/swift

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

我收到了这个错误:

Playground 执行失败:错误:5:14:错误:找不到接受提供的参数的“init”的重载 var string = String(count: 5, repeatValue: "a")

这真的有效吗?

【问题讨论】:

    标签: string swift swift-playground


    【解决方案1】:

    看来您必须显式地将 Character 类型传递给它才能运行。这对我有用。

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

    虽然,这一切也可能混杂了错误。我相信你这样做的方式应该是独立的。而且我似乎根本无法在这个初始化程序上完成代码。

    编辑:我要处理错误。下面的编译就好了。

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

    【讨论】:

    • 这行得通!奇怪的是 Swift 参考指南出现了这么大的错误。
    • 似乎 repeatValue 必须是 Character 类型,但在 Swift 中没有明显的方法来制作字符文字(在 C 中,你会使用单引号而不是双引号。)
    • 向导没坏,类型推理引擎坏了。下标是一个典型的例子,尽管具有非常明确的类型,但它还是一脸懵逼。
    • 将 Swift 3 与 Xcode 8.1 一起使用,语法发生了变化,在这种情况下为:let array = Array(repeating: "a", count: 5)
    【解决方案2】:

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

    let sososo = String(repeating: "so", count: 3)
    

    【讨论】:

    • 谢天谢地,这个更新的初始化程序也接受字符串而不是字符。
    【解决方案3】:

    这很好用:

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

    【讨论】:

    • 可以,不过和上面的答案基本一样。
    【解决方案4】:

    对于 swift 3.x 中的任何人来说,现在这样的事情就像一个魅力。

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

    【讨论】:

      【解决方案5】:

      我知道这是一个老问题,并且已经有了答案。不过我想我知道为什么 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"
      

      【讨论】:

        【解决方案6】:

        斯威夫特 3:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-02
          • 1970-01-01
          • 1970-01-01
          • 2016-08-04
          • 2021-11-26
          • 2022-11-13
          相关资源
          最近更新 更多