Swift Replacing a variable value with an extension function

I want to make a function to change the original value of my variable. eg

class Something {
    var name:String = "   John Diggle   "
    name.trim()
    print(name)
    // prints out "   John Diggle   "

    // what I wanna do is to make it so that I don't do this
    name = name.trim()
    print(name)
    // prints out "John Diggle"
}




extension String {
   func trim() -> String{
       return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
   }
}

Is there a way to change the value of a variable inside a function without doing name = name.trim()?

+4
source share
3 answers

Maybe something like this?

extension String {
    mutating func trim() {
        self = self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
    }
}

Then you can use it as name.trim()

+5
source

Tj3n ( ), API (, trimmed), , , (, trim) , :

extension String {

    func trimmed() -> String {
        return self.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())
    }

    mutating func trim() {
        self = self.trimmed()
    }

}

, :

var name = "   John Diggle   "
name.trim()
print("'\(name)'")

:

let name = "   John Diggle   "
let trimmedName = name.trimmed()
print("'\(trimmedName)'")
+4

You can use didSetto trim a line every time it changes:

class Something {
    var name: String = "" {
        didSet {
            name = name.trimmingCharacters(in: .whitespacesAndNewlines)
        }
    }
}

let s = Something()
s.name = "   John Diggle     "

// Note that we never call trim in the outside code
print("'\(s.name)'")
+1
source

Source: https://habr.com/ru/post/1658758/


All Articles