boolean - Compare value and return a bool in Swift -
i converting code objective-c swift. declared function compare values of 2 properties , return bool. , confused why code not work in swift.
private var currentlinerange: nsrange? var location: uint? func atbeginningofline() -> bool { return self.location! == self.currentlinerange?.location ? true : false } compiler gave me error:
could not find overload == accepts supplied arguments
thanks.
you have 2 optional values , want check if they’re equal. there version of == comparing 2 optionals – need of same type.
the main problem here comparing nsrange.location, int, location, uint. if tried without complication of optionals, you’d error:
let ui: uint = 1 let i: int = 1 // error: binary operator '==' cannot applied operands of // type 'int' , ‘uint' == ui there’s 2 ways can go. either change location int, , you’ll able use optional ==:
private var currentlinerange: nsrange? var location: int? func atbeginningofline() -> bool { // both optionals contain int, can use == on them: return location == currentlinerange?.location } or, if location need uint other reason, map 1 of optionals type of other compare them:
private var currentlinerange: nsrange? var location: uint? func atbeginningofline() -> bool { return location.map { int($0) } == currentlinerange?.location } one thing careful of – nil equal nil. if don’t want (depends on logic you’re going for), need code explicitly:
func atbeginningofline() -> bool { if let location = location, currentlinerange = currentlinerange { // assuming want stick uint return int(location) == currentlinerange.location } return false // if either or both nil }
Comments
Post a Comment