Swift - 字符串 substringWithRange - 'String' 不可转换为“()”

Swift - String substringWithRange - 'String' is not convertible to '()'

我正在尝试一些我在 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 项目中使用它时,它给我一个编译错误:

知道为什么会这样吗?

您没有指定 func 的 return 类型:

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

在你的函数声明中你说它 return 是一个空的,但你试图 return 一个字符串,你需要在你的函数的末尾添加 -> String函数来匹配你正在尝试做的事情

你的函数:

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

应该是:

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

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

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

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

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

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

旁注:
编写 return 时,如果没有指定 returned 的内容,Swift 会自动 returns ().