【问题标题】:PF_NULLABLE parse framework difficult to understand, sending Message's to PFUserPF_NULLABLE 解析框架难以理解,向 PFUser 发送 Message
【发布时间】:2015-08-07 10:52:10
【问题描述】:

使用 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;

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

【问题讨论】:

    标签: ios objective-c parse-platform objective-c-nullability


    【解决方案1】:

    从 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 指针传递给一个 nil 指针到一个 NSError 对象。

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

    有关 Objective-C 可空性注释的更多信息,see this Stack Overflow answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2018-09-16
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多