Swift;从未使用过不可变值的初始化
Swift; Initialization of immutable value was never used
我有一段简单的 Swift
代码:
let message = "This is a test"
if message.range(of:"test") != nil {
let message = "Changed string"
}
print(message)
我想做的:如果字符串message
包含字符串test
,将其更改为Changed string
。否则保持不变。
我收到以下警告:
Initialization of immutable value 'message' was never used; consider
replacing with assignment to '_' or removing it
行
let message = "Changed string"
此外,打印输出仍然是 This is a test
而不是预期的 Changed string
。
我做错了什么?
如果你想让它改变它,你应该把它变成一个变量并使用相同的变量。
var message = "This is a test"
if message.range(of:"test") != nil {
message = "Changed string"
}
print(message)
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"
您的代码中有两个名为 message 的变量。一种是带有"Changed string"的内部变量。另一个外部的值 "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 所回答。
所以,一些人已经给了你合理的、技术上正确的答案,但我想解释一下:
- 将值声明为
let
意味着它是一个常量,即不可变的
- 您收到警告是因为您没有按预期修改值,而是在 if 语句的范围内重新声明它。为了声明一个可变变量,我们使用
var
即:
var message = "This is a test"
- 更适合此条件的 API 可能是 contains,因为它是语言环境未知的并且 returns
Bool
,而不是必须转换 NSRange
到 Bool
通过测试 != nil
综上所述,最终代码如下:
var message = "This is a test"
if message.contains("test") {
message = "Changed string"
}
print(message)
希望对您有所帮助!
我有一段简单的 Swift
代码:
let message = "This is a test"
if message.range(of:"test") != nil {
let message = "Changed string"
}
print(message)
我想做的:如果字符串message
包含字符串test
,将其更改为Changed string
。否则保持不变。
我收到以下警告:
Initialization of immutable value 'message' was never used; consider replacing with assignment to '_' or removing it
行
let message = "Changed string"
此外,打印输出仍然是 This is a test
而不是预期的 Changed string
。
我做错了什么?
如果你想让它改变它,你应该把它变成一个变量并使用相同的变量。
var message = "This is a test"
if message.range(of:"test") != nil {
message = "Changed string"
}
print(message)
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"
您的代码中有两个名为 message 的变量。一种是带有"Changed string"的内部变量。另一个外部的值 "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 所回答。
所以,一些人已经给了你合理的、技术上正确的答案,但我想解释一下:
- 将值声明为
let
意味着它是一个常量,即不可变的 - 您收到警告是因为您没有按预期修改值,而是在 if 语句的范围内重新声明它。为了声明一个可变变量,我们使用
var
即:
var message = "This is a test"
- 更适合此条件的 API 可能是 contains,因为它是语言环境未知的并且 returns
Bool
,而不是必须转换NSRange
到Bool
通过测试 != nil
综上所述,最终代码如下:
var message = "This is a test"
if message.contains("test") {
message = "Changed string"
}
print(message)
希望对您有所帮助!