Robert Tillman Robert Tillman - 1 year ago 289
iOS Question

Value of type 'String' has no member 'stringByTrimmingCharactersInSet'

After converting my project to swift 3, I get the following

Value of type 'String' has no member 'stringByTrimmingCharactersInSet'
error on the first line within this block:

extension UIColor {
convenience init (hex:String) {
var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercased() // error appears on this line

if (cString.hasPrefix("#")) {
cString = (cString as NSString).substring(from: 1)

let rString = (cString as NSString).substring(to: 2)
let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)
let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)

var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
Scanner(string: rString).scanHexInt32(&r)
Scanner(string: gString).scanHexInt32(&g)
Scanner(string: bString).scanHexInt32(&b)

self.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))

I'm guessing the error derives from a change in syntax with
.. what is the correction for this?

Answer Source

The new syntax is like this:

var cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()

As a suggestion, you don't need to specify that cString is a String, as this is assumed with the value you are assigning to it.