【问题标题】:Objective-c specific iOS version in @interface@interface 中的 Objective-c 特定 iOS 版本
【发布时间】:2018-08-06 23:54:01
【问题描述】:

我正在尝试实现 Apple Pay,我尝试实现 2 种方法,一种用于 iOS10,一种用于 iOS11+,

所以在我的实现中我有:

-(void) paymentAuthorizationViewController
  (PKPaymentAuthorizationViewController *)controller
                                   didAuthorizePayment:(PKPayment *)payment
                                               handler:(void (^)(PKPaymentAuthorizationResult * _Nonnull))completion  API_AVAILABLE(ios(11.0))
        {
       self.completionResult = completion
            ...

- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                                    didAuthorizePayment:(PKPayment *)payment
                                             completion:(void (^)(PKPaymentAuthorizationStatus))completion 
            {
      self.completionStatus = completion
        ...

在我的界面中我有:

@property (nonatomic, copy) void (^completionStatus)(PKPaymentAuthorizationStatus);
@property (nonatomic, copy) void (^completionResult)(PKPaymentAuthorizationResult *);

我遇到的问题是 XCode 在界面中给我以下警告:

'PKPaymentAuthorizationResult' is only available on iOS 11.0 or newer

这是实现特定于版本的代码的正确方法吗?我可以在接口中指定特定于版本的代码吗?

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    要使界面中的警告静音,您可以尝试在声明末尾添加 API_AVAILABLE 宏,如下所示:API_AVAILABLE(ios(11.0))

    【讨论】:

    • 谢谢我添加了它@property (nonatomic, copy) void (^completionResult)(PKPaymentAuthorizationResult *) API_AVAILABLE(ios(11.0)); ,现在界面没有抱怨了。我在第一个paymentAuthorizationViewController 中已经有了那个位,它适用于 ios11,我还没有在 ios10 上尝试过。
    • 如果您删除第一位,我会将您的答案标记为已接受,因为我的问题是关于界面的,您是否可以接受?
    【解决方案2】:

    我相信你也可以做到这一点。

    @property (nonatomic, copy) void (^completionResult)(PKPaymentAuthorizationResult *) API_AVAILABLE(ios(11.0));
    

    【讨论】:

    • 谢谢,它有效。无法接受您的答案,因为与其他答案相比,您只迟了几秒钟。
    猜你喜欢
    • 2017-10-13
    • 2017-07-25
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多