我有一段简单的Swift
代码:
let message = "This is a test"
if message.range(of:"test") != nil {
let message = "Changed string"
}
print(message)
我要做什么:如果字符串message
包含字符串test
,请将其更改为Changed string
。否则保持不变。
我收到以下警告:
从未使用过对不可变值“消息”的初始化;考虑 替换为分配给“ _”或将其删除
行
let message = "Changed string"
此外,打印输出仍为This is a test
,而不是预期的Changed string
。
我在做什么错了?
答案 0 :(得分:4)
您为什么要再次声明?如果要更改它,则应将其设为变量并使用相同的变量。
var message = "This is a test"
if message.range(of:"test") != nil {
message = "Changed string"
}
print(message)
答案 1 :(得分:3)
因此,一些人已经给了您合理的,技术上正确的答案,但是我想解释一下:
let
意味着它是一个常量,即不可变var
,即: var message = "This is a test"
Bool
,而不必通过以下方式将NSRange
转换为Bool
针对!= nil 鉴于上述情况,最终代码如下:
var message = "This is a test"
if message.contains("test") {
message = "Changed string"
}
print(message)
希望有帮助!
答案 2 :(得分:2)
Swift 4实施
这是我解决此问题的最简单方法。
var message1 = "This is a test"
var message2 = "This is a"
print(message1.contains("test") ? "Changed String" : message1) //"Changed String"
print(message2.contains("test") ? "Changed String" : message2) //"This is a"
答案 3 :(得分:2)
在您的代码中有两个称为message的变量。一种是带有“已更改的字符串”的内部变量。另一个外部值为“ This is a test”。因此,如果要更改变量,只需使用var
进行声明。
如果您的代码是这样的:
let message = "This is a test"
if message.range(of:"test") != nil {
let message = "Changed string"
print (message)
}
print(message)
您将获得以下输出:
"Changed string"
"This is a test"
这是因为内部变量没有更改外部变量。 在内部,您只声明而不使用它。警告只是为了提醒您您有一个未使用的变量。
您可以声明以下内容来代替此双重let
:
var message = "This is a test"
if message.range(of:"test") != nil {
message = "Changed string"
}
print(message)
Rakesha Shastri回答。