3

I have a scenario in which I have a simple data object in Swift, containing multiple property variables. They are a mix of String? and Double? value types. I'm trying to retrieve the values for each property using valueForKey. My code looks something like this...

let myDataObj = ...
let stringKeyName = "myStringProperty"
let doubleKeyName = "myDoubleProperty"

guard let stringPropertyValue = myDataObj.valueForKey(stringKeyName) else {
    return
}
guard let doublePropertyValue = myDataObj.valueForKey(doubleKeyName) else {
    return
}

The first call to get stringPropertyValue works fine, and I am able to retrieve the value as expected. However, the second call to retrieve doublePropertyValue fails with an exception saying, "this class is not key value coding-compliant for the key myDoubleProperty.'"

I know that the property name is correct, and I also know that a value is set for this property. Why is it that valueForKey works on String objects, but not Double objects?

rmaddy
  • 314,917
  • 42
  • 532
  • 579
Shadowman
  • 11,150
  • 19
  • 100
  • 198

1 Answers1

7

Correct, you can only do key value coding for types that can be represented in Objective-C. Unfortunately, those types that are represented as primitive data types in Objective-C (e.g. Swift's Int and Double are represented as NSInteger and double in Objective-C, respectively) can not be presented as such if they are optionals. In Objective-C, optionals only make sense with class types, not fundamental data types.

Rob
  • 415,655
  • 72
  • 787
  • 1,044