class Test : NSObject {
   var testUint8: UInt8 = 0x00
   var testNSNumber: NSNumber = NSNumber(unsignedChar: 0x00)
}

var test1 = Test()
let a = test1.valueForKeyPath("testUint8") as! UInt8→(1)落ちる
let b = test1.valueForKeyPath("testNSNumber") as! NSNumber

ブレイクを張ってみたところ、下記のようになっており、想定ではUInt8の型となるのではと思っていたので、よくわからなくなっています。
bは (NsNumber) Int32(値)

ちなみに、(1)を

let a = test1.valueForKeyPath("testUint8") as! NSNumber

とすると落ちることはないのですが、やはり、
aは (NsNumber) Int32(値)
となってしまいます。
valueForKeyPathで取得する場合のキャストの方法が何かおかしいのでしょうか。