2

使用 Xcode 6.3 解析。框架给了我错误,所以我下载了更新的 Parse 框架并开始工作。

现在,有一些新的东西我试图理解这种方法logInWithUsername是什么。以前它过去很简单。我在编写代码时看到了更多的空值。在某些时候我会感到困惑,主要是指向指针(即NSError)的指针。

[PFUser logInWithUsername:(NSString * __nonnull) 
                 password:(NSString * __nonnull) 
                    error:(NSError * __nullable __autoreleasing * __nullable)];

当我跳到定义时,这是一个完全不同的故事,这里的语法似乎很清楚:

+ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username
                                     password:(NSString *)password
                                        error:(NSError **)error;

我是否在此框架的配置或设置方面遗漏了什么?

4

1 回答 1

3

在 Objective-C 端,您可以完全忽略这些可空性注释。这些严格用于与 Swift 接口,并允许 Swift 是否应该将对象视为可选或非可选,而不是将所有内容视为隐式展开的可选。

如果我们翻译您的 Objective-C 方法:

[PFUser logInWithUsername:(NSString * __nonnull) 
                 password:(NSString * __nonnull) 
                    error:(NSError * __nullable __autoreleasing * __nullable)];

Swift 等价物是:

PFUser.logIn(username: String, password: String, error: inout NSError?)

它的要点是:该方法不接受nil用户名或密码参数,但它需要对可选错误对象的可选引用。

也就是说,您的指针是否为nil,或者它指向的内容是否为nil(两者都允许为nil)都没有关系。该方法将解决它。

如果您调用该方法并传递nil错误参数,则您传递的是一个nil指针。如果传递未初始化的NSError指针 ( NSError *error = nil;),则传递的是指向对象指针的非nil指针。nilNSError

但同样,如果你是从 Objective-C 端使用这个库,你可以完全忽略它。它像往常一样工作。这只会对 Swift 端产生影响,因为编译器对参数的可空性非常严格。

有关 Objective-C 可空性注释的更多信息,请参阅此 Stack Overflow 答案

于 2015-05-25T23:48:58.170 回答