迅速; 从未使用不可变值的初始化

Dav*_*vid 2 swift swift-playground

我有一段简单的Swift代码:

let message = "This is a test"

if message.range(of:"test") != nil {
    let message = "Changed string"
}

print(message)
Run Code Online (Sandbox Code Playgroud)

我想要做什么:如果 stringmessage包含 string test,请将其更改为Changed string. 否则保持不变。

我收到以下警告:

从未使用过不可变值“消息”的初始化;考虑替换为“_”的赋值或将其删除

对于线

let message = "Changed string"
Run Code Online (Sandbox Code Playgroud)

此外,打印输出仍然This is a test而不是预期的Changed string

我究竟做错了什么?

Rak*_*tri 8

如果你想让它改变它,你应该让它成为一个变量并使用相同的变量。

var message = "This is a test"

if message.range(of:"test") != nil {
    message = "Changed string"
}

print(message)
Run Code Online (Sandbox Code Playgroud)


小智 6

所以,有些人已经给了你合理的、技术上正确的答案,但我想解释一下:

  • 声明一个值let意味着它是一个常量,即不可变的
  • 您收到警告是因为您没有按预期修改值,而是在 if 语句的范围内重新声明它。为了声明一个可变变量,我们使用varie:

var message = "This is a test"

  • 一个更适合这个条件的 API 可能是contains,因为它不知道语言环境并返回Bool,而不是NSRange必须Bool通过测试来转换为!= nil

综上所述,最终代码如下:

var message = "This is a test"

if message.contains("test") {
    message = "Changed string"
}

print(message)
Run Code Online (Sandbox Code Playgroud)

希望有帮助!