Arrays 通过数组删除变量
我试图删除数组中许多变量的值:Arrays 通过数组删除变量,arrays,swift,Arrays,Swift,我试图删除数组中许多变量的值: var fbUserID = String() var fbUserName = String() var meNickname = String() var userIDOneSignal = String() var deleteStrings = [fbUserID, fbUserName, meNickname, userIDOneSignal] 有没有可能做到这一点: for i in deleteStrings { i.removeAll(
var fbUserID = String()
var fbUserName = String()
var meNickname = String()
var userIDOneSignal = String()
var deleteStrings = [fbUserID, fbUserName, meNickname, userIDOneSignal]
有没有可能做到这一点:
for i in deleteStrings {
i.removeAll()//remove all as in remove the values of each variable
}
我还尝试过使用
deleteStrings[I].removeAll()
只需删除数组元素即可
deleteStrings.removeAll()
只需删除数组元素
deleteStrings.removeAll()
由于值语义,您无法从数组中变异变量(作为指针) 使用结构而不是数组
struct User {
var fbUserID = "12"
var fbUserName = "Foo"
var meNickname = "Baz"
var userIDOneSignal = "123"
mutating func clear()
{
fbUserID = ""
fbUserName = ""
meNickname = ""
userIDOneSignal = ""
}
}
var user = User()
print(user.fbUserID) // "12"
user.clear()
user.fbUserID = ""
print(user.fbUserID) // ""
由于值语义,您无法从数组中变异变量(作为指针) 使用结构而不是数组
struct User {
var fbUserID = "12"
var fbUserName = "Foo"
var meNickname = "Baz"
var userIDOneSignal = "123"
mutating func clear()
{
fbUserID = ""
fbUserName = ""
meNickname = ""
userIDOneSignal = ""
}
}
var user = User()
print(user.fbUserID) // "12"
user.clear()
user.fbUserID = ""
print(user.fbUserID) // ""
如果要删除/删除变量值,请使用optional,否则变量值只会在超出范围时被删除或不存在 例如:
var a: Int? = 5 // it have default value 5
a = nil // Now a have nil which is kind of telling that it contains nothing which is what you want to achieve
现在来回答你的问题
有没有可能做到这一点:
for i in deleteStrings {
i.removeAll()//remove all as in remove the values of each variable
}
在字符串数组上进行迭代,然后针对每个字符串,尝试删除所有字符。首先,你会得到一个错误
error: cannot use mutating member on immutable value: 'i' is a 'let' constant
即使您将使用var
进行更正,它也无法实现您试图执行的操作,即我想删除变量值
,因为您的fbUserID…
所有其他变量都将有您初始化的数据副本
现在怎么做呢
- 您可以使用optional来实现它
var fbUserID: String? = String()
var fbUserName: String? = String()
var meNickname: String? = String()
var userIDOneSignal: String? = String()
// To delete you will need to assign them nil
fbUserId = nil
同样,您不能在循环中执行这些操作,因为var
属于值类型,当您将其添加到列表中时,会添加它们的副本。如果您要删除/删除变量值,请使用可选选项,否则您的变量值只会在超出范围时被删除或不存在
例如:
var a: Int? = 5 // it have default value 5
a = nil // Now a have nil which is kind of telling that it contains nothing which is what you want to achieve
现在来回答你的问题
有没有可能做到这一点:
for i in deleteStrings {
i.removeAll()//remove all as in remove the values of each variable
}
在字符串数组上进行迭代,然后针对每个字符串,尝试删除所有字符。首先,你会得到一个错误
error: cannot use mutating member on immutable value: 'i' is a 'let' constant
即使您将使用var
进行更正,它也无法实现您试图执行的操作,即我想删除变量值
,因为您的fbUserID…
所有其他变量都将有您初始化的数据副本
现在怎么做呢
- 您可以使用optional来实现它
var fbUserID: String? = String()
var fbUserName: String? = String()
var meNickname: String? = String()
var userIDOneSignal: String? = String()
// To delete you will need to assign them nil
fbUserId = nil
同样,您不能重复执行这些操作,因为var
属于值类型,当您将其添加到列表中时,会添加它们的副本。如果您的类继承自NSObject
,您可以使用以下名称访问字段:
class User: NSObject {
var fbUserID = String()
var fbUserName = String()
var meNickname = String()
var userIDOneSignal = String()
var deleteStrings = ["fbUserID", "fbUserName", "meNickname", "userIDOneSignal"]
func clearAll() {
deleteStrings.forEach { setValue("", forKey: $0) }
}
}
let user = User()
user.fbUserID = "12345"
user.fbUserName = "Joseph Doe"
user.meNickname = "Joe"
print(user.meNickname) // "Joe"
user.clearAll()
print(user.meNickname) // ""
如果您的类继承自NSObject
,则可以使用按名称访问字段:
class User: NSObject {
var fbUserID = String()
var fbUserName = String()
var meNickname = String()
var userIDOneSignal = String()
var deleteStrings = ["fbUserID", "fbUserName", "meNickname", "userIDOneSignal"]
func clearAll() {
deleteStrings.forEach { setValue("", forKey: $0) }
}
}
let user = User()
user.fbUserID = "12345"
user.fbUserName = "Joseph Doe"
user.meNickname = "Joe"
print(user.meNickname) // "Joe"
user.clearAll()
print(user.meNickname) // ""
OP需要非可选的空字符串。“在这种情况下,选择是一个不好的建议。”瓦迪安我想,他问了一些清空字符串的方法。可选是表示它的一种方式。顺便说一句,谢谢你的回复。空字符串和可选的nil
字符串是两个完全不同的东西。面对非可选值的巨大好处:代码永远不会在运行时崩溃,编译器也不会在编译时分配可选值。我同意。我关心的是“删除变量”!='空字符串'。我认为“Delete Variable”是指“NULL/NIL”。OP需要非可选的空字符串。“在这种情况下,选择是一个不好的建议。”瓦迪安我想,他问了一些清空字符串的方法。可选是表示它的一种方式。顺便说一句,谢谢你的回复。空字符串和可选的nil
字符串是两个完全不同的东西。面对非可选值的巨大好处:代码永远不会在运行时崩溃,编译器也不会在编译时分配可选值。我同意。我关心的是“删除变量”!='空字符串'。我认为“Delete Variable”是指“NULL/NIL”。为什么不简单地用let声明所有属性,而不是“clear”只是实例化一个新的struct@LeoDabus是的,这样更好,但我想保留问题的基本“工作流”。为什么不简单地用let声明所有属性,而不是“clear”只实例化一个新属性struct@LeoDabus对这更好,但我想保留问题的基本“工作流程”。你应该使用字典你应该使用字典