【问题标题】:Swift - String substringWithRange - 'String' is not convertible to '()'Swift - String substringWithRange - 'String' 不可转换为 '()'
【发布时间】:2015-08-13 19:41:38
【问题描述】:

我正在尝试一些简单的代码,这些代码是在 natashatherobot.com 上找到的。

var str = "Hello, playground"

let rangeOfHello = Range(start: str.startIndex, end: advance(str.startIndex, 5))
let helloStr = str.substringWithRange(rangeOfHello)
return helloStr

当我在 Playgrounds 中尝试时效果很好:

但是当我尝试在我的 Xcode 项目中使用它时,它给了我一个编译错误:

任何想法为什么会发生这种情况?

【问题讨论】:

    标签: string swift compiler-errors


    【解决方案1】:

    在您的函数声明中,您说它返回一个 void,但您正试图返回一个字符串,您需要在函数末尾添加 -> String 以匹配您要执行的操作

    你的功能:

    func getStringBetween(startString: String, endString: String) -> ()
    

    应该是:

    func getStringBetween(startString: String, endString: String) -> String
    

    【讨论】:

      【解决方案2】:

      您没有指定func 的返回类型:

      func getStringBetween(startString: String, endString: String) -> String {
      

      【讨论】:

        【解决方案3】:

        问题在于方法getStringBetween(:endString:),您在extension 中为String 定义了该方法。
        该方法没有定义返回类型(参数列表后面没有-> Type)。因此隐式返回类型是Void,所以你的方法可以写成:

        func getStringBetween(startString: String, endString: String) -> Void
        

        在 Swift 中,Void 类型相当于一个空元组 ()

        因此,问题在于 Swift 期望返回类型为 Void,由 () 表示,但您返回的是 String
        通过将返回类型 String 添加到方法的声明中,可以轻松解决此问题:

        func getStringBetween(startString: String, endString: String) -> String
        

        旁注:
        在编写return 时,如果没有指定要返回的内容,Swift 会自动返回()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 2014-10-16
          • 2020-06-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多