This is a framework specifically focused on bridging NSValue/NSNumber types more smoothly between Objective-C and Swift and vis-versa.
There are four unique components:
All numeric types implement NSNumberWrappable
and all common NSValue types implement NSValueWrappable
.
public protocol NSNumberWrappable : NSValueWrappable {
init(_ number: NSNumber)
func toNSNumber() -> NSNumber
}
Additionally, inits have been added, especially handling the concept of nullable NSNumber -> optional Int
let nsnumber: NSNumber? = nil
if let intval = Int(nsnumber) {
// ...
}
Note there's a Swift compiler issue which is why NSValue additions are slightly different.
##Treating NSDecimal as a first-class primitive
NSDecimal
is a 128-bit struct that represents a decimal number.
Whereas one might typically use NSDecimalNumber
, I felt it was in the spirit of Swift to fix the struct by adding Equatable
, Comparable
, and SignedNumberType
conformance, as well as arithmatic operators.
Now you should be able to work on larger decimal types without having to create a class.
##Better Objective-C automated bridging
CGPoint
, etc, and NSDecimal
, now implement _ObjectiveCBridgeable
. _ObjectiveCBridgeable
is a somewhat obfuscated protocol that allows one to specify special conversion of non-Objective-C types to Objective-C. The primary use case here is to allow arrays, dictionaries, etc, to bridge appropriately.
##Typed key-value-observation additions to NSObject
Combined with all the pieces above, we get better bridging, which allows generics to better type KVO. There are some new extensions on NSObject
that allow a better, typed KVO experience.