GKH
GKH

Reputation: 179

remove variables through an array

I'm trying to delete values of a lot of variables inside an array:

var fbUserID = String()
var fbUserName = String()
var meNickname = String()
var userIDOneSignal = String()

var deleteStrings = [fbUserID, fbUserName, meNickname, userIDOneSignal]

Is it possible to do something in line of this:

for i in deleteStrings {
    i.removeAll()//remove all as in remove the values of each variable
}

I've also tried using deleteStrings[i].removeAll()

Upvotes: 0

Views: 622

Answers (4)

vacawama
vacawama

Reputation: 154711

If your class inherits from NSObject, you can use key value coding to access the fields by name:

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)  // ""

Upvotes: 0

vadian
vadian

Reputation: 285270

Due to value semantics you cannot mutate variables (as a pointer) from an array.

Rather than an array use a struct

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) // ""

Upvotes: 3

Rahul
Rahul

Reputation: 2100

If you want to delete/remove variable value then use optional otherwise your variable value only gets removed or become non-existence when it goes out of scope.

For Example:

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

Now coming to your question.

Is it possible to do something in line of this:

for i in deleteStrings {
    i.removeAll()   
}

You are iterating over an array of strings and then for each string, you are trying to remove all the characters. First of all you will get error

 error: cannot use mutating member on immutable value: 'i' is a 'let' constant

Even though you will correct is using var it will not achieve what you are trying to do i.e. I want to delete the variables value because still your fbUserID ... all other variables will have copies of the data you initialised with.

Now how to do it?

  • You can use optional to achieve it.

    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
    

Again, you can't do them over loop because var are of values type and when you add it to the list their copies get added.

Upvotes: -1

Harish Singh
Harish Singh

Reputation: 765

Simply delete the array elements

deleteStrings.removeAll()

Upvotes: 0

Related Questions