据推测,我必须在这里做错事,但这段代码似乎不起作用,我认为应该这样做。任何人都可以发现我做错了或者这可能是编译错误吗?
由于它没有被捕获而引发异常
根据文档提出例外:
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.
答案 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