想必我在这里一定做错了什么,但这段代码似乎不起作用,我认为应该这样做。有人能发现我做错了什么吗?或者这可能是一个编译器错误?
异常不会被抛出,也不会被捕获
根据文档,会引发异常:
Declaration
SWIFT
func valueForKey(_ key: String) -> AnyObject?
OBJECTIVE-C
- (id _Nullable)valueForKey:(NSString * _Nonnull)key
Parameters
key
The name of one of the receiver's properties.
Return Value
The value of the property specified by key.
Discussion
If key is not a property defined by the model, the method raises an exception. This method is overridden by NSManagedObject to access the managed object’s generic dictionary storage unless the receiver’s class explicitly provides key-value coding compliant accessor methods for key.
最佳答案
因为valueForKey
不会抛出任何异常。
看签名
func valueForKey(_ key: String) -> AnyObject?
它可以选择返回
AnyObject
,因此如果您要查找的值不在那里,它将只返回nil
。就这么做
if let name = managedObject.valueForKey("displayName") {
...
} else if let name = managedObject.valueForKey("name") {
...
}
总之,在swift中,只有当函数被显式标记为引发异常时,才能使用
try
。编译器会为您检查这个,但您也可以查看函数签名,以知道它是否抛出。如果
valueForKey
引发异常,则其函数签名将如下所示:func valueForKey(_ key: String) throws -> AnyObject?