Objective-C 编译器进行的奇怪的明显类型推断
Strange apparent type inference by Objective-C compiler
考虑一个包含以下行的 Objective-C 程序:
NSArray *records = dictionary[string];
NSDate *date = [records.lastObject date];
其中 records
是 NSManagedObject
的数组,具有 NSDate
.
类型的属性 date
编译器(在 Xcode 6.1.1 中)对第二行发出以下警告:
Incompatible pointer types initializing NSDate * with an expression
of type GTLDateTime.
怎么会这样?我不希望编译器尝试任何 records.lastObject
类型 id
之后的推论。但它似乎试图得出一个错误的结论。
那么这里可能发生了什么?
问题是您的项目某处有一个名为 date 的方法,该方法 return 是一个 GTLDateTime 对象。由于 .lastObject
是 id
类型,xcode 搜索名为 "date" 的选择器以尝试推断 return 类型。如果您的代码是正确的,您应该将 [records.lastObject date]
转换为 NSDate
或任何正确的 return 类型,那么您应该没问题。
考虑一个包含以下行的 Objective-C 程序:
NSArray *records = dictionary[string];
NSDate *date = [records.lastObject date];
其中 records
是 NSManagedObject
的数组,具有 NSDate
.
date
编译器(在 Xcode 6.1.1 中)对第二行发出以下警告:
Incompatible pointer types initializing NSDate * with an expression
of type GTLDateTime.
怎么会这样?我不希望编译器尝试任何 records.lastObject
类型 id
之后的推论。但它似乎试图得出一个错误的结论。
那么这里可能发生了什么?
问题是您的项目某处有一个名为 date 的方法,该方法 return 是一个 GTLDateTime 对象。由于 .lastObject
是 id
类型,xcode 搜索名为 "date" 的选择器以尝试推断 return 类型。如果您的代码是正确的,您应该将 [records.lastObject date]
转换为 NSDate
或任何正确的 return 类型,那么您应该没问题。