ios - Should CIImage be Equatable? -


so, apple’s documentation says ciimage conforms equatable. take mean following unit test pass. however, doesn’t. i’m interested in why.

func test_ciimageequalityshouldwork() {     let bundle = nsbundle(forclass: prototypetests.self)     guard let path = bundle.pathforresource("testimage", oftype: "png") else { return }     guard let image = uiimage(contentsoffile: path) else { return }      let thingy1 = ciimage(image: image)     let thingy2 = ciimage(image: image)     xctassert(thingy1 == thingy2) } 

the image exists, guard statements both pass, assert fails, aren’t equal.

out of interest, i’ve tried creating uiimage twice , comparing too. fails.

all nsobject subclasses conform equatable, , == function calls isequal: method on objects. isequal: method of nsobject compares object pointers, i.e. o1 == o2 holds if o1 , o2 refer same object instance.

see example interacting objective-c apis:

swift provides default implementations of == , === operators , adopts equatable protocol objects derive nsobject class. default implementation of == operator invokes isequal: method, , default implementation of === operator checks pointer equality. should not override equality or identity operators types imported objective-c.

the base implementation of isequal: provided nsobject class equivalent identity check pointer equality.

many nsobject subclasses override isequal: method (e.g. nsstring, nsarray, nsdate, ...) not ciimage:

let thingy1 = ciimage(image: image) let thingy2 = ciimage(image: image) 

creates 2 different ciimage instances , these compare "not equal".


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -