为什么我无法捕捉到这个Swift异常?

时间:2015-10-16 09:36:28

标签: ios swift

据推测,我必须在这里做错事,但这段代码似乎不起作用,我认为应该这样做。任何人都可以发现我做错了或者这可能是编译错误吗?

由于它没有被捕获而引发异常

enter image description here

根据文档提出例外:

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.

1 个答案:

答案 0 :(得分:3)

因为<ivysettings> <resolvers> <filesystem name="public"> <ivy pattern="/path/to/my/public/rep/[organisation]/[module]/ivy-[revision].xml" /> <artifact pattern="/path/to/my/public/rep/[organisation]/[module]/[artifact]-[revision].[ext]" /> </filesystem> </resolvers> </ivysettings> 不会抛出任何异常。

查看签名

valueForKey

它可选择返回func valueForKey(_ key: String) -> AnyObject? ,因此如果您要查找的值不存在,则只返回AnyObject

只做

nil

底线,在swift中,只有当函数被明确标记为抛出异常时,才能使用if let name = managedObject.valueForKey("displayName") { ... } else if let name = managedObject.valueForKey("name") { ... } 。编译器会为您检查这个,但您也可以查看函数签名以了解它是否抛出。

如果try抛出异常,其函数签名将如下所示:

valueForKey