Swift - String substringWithRange - ' String'不可转换为'()'

时间:2015-05-31 07:36:19

标签: string swift compiler-errors

我正在尝试一些简单的代码,我在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 中试用它时效果很好:

Playground

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

Xcode Project

为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

在你的函数声明中,你说它返回一个void,但你试图返回一个字符串,你需要在函数末尾添加-> String以匹配你想要做的事情< / p>

你的职能:

func getStringBetween(startString: String, endString: String) -> ()
应该是:

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

答案 2 :(得分:0)

问题是方法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会自动返回()