Objective-C:从可空指针'NSURL*_Nullable'到非可空指针类型'NSURL*_Nonnull'

use*_*482 3 objective-c nsurl ios xcode8

我正在尝试转换NSURL * _Nullable为不可空的.任何人都知道我怎么能这样做?

这是一些背景:

我正在尝试使用ios-oauthconsumer,我正在尝试初始化一些对象:

self.requestTokenRequest = [[OAMutableURLRequest alloc] initWithURL:_requestTokenUrl
                                                               consumer:_consumer
                                                                  token:nil
                                                                  realm:nil
                                                      signatureProvider:nil
                                                                  nonce:nil
                                                              timestamp:nil];
Run Code Online (Sandbox Code Playgroud)

它们已由此init初始化:

- (id)initWithURL:(NSURL *)aUrl
         consumer:(OAConsumer *)aConsumer
            token:(OAToken *)aToken
            realm:(NSString *)aRealm
signatureProvider:(id<OASignatureProviding>)aProvider
            nonce:(NSString *)aNonce
        timestamp:(NSString *)aTimestamp {
    if ((self = [self initWithURL:aUrl consumer:aConsumer token:aToken realm:aRealm signatureProvider:aProvider])) {
      nonce = [aNonce copy];
      timestamp = [aTimestamp copy];
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

如果我说我得到这个:

在此输入图像描述

我试着使用那个对象.我收到这个警告:

在此输入图像描述 如果你们中的任何人知道如何将_Nullable转换为非Nullable对象,我将非常感激.

Los*_*aty 5

这非常简单=您需要做的就是_requestTokenUrl在方法调用中使用它之前将其分配给变量.这应该足够了:

NSURL *url = _requestTokenUrl;
self.requestTokenRequest = [[OAMutableURLRequest alloc] initWithURL:url
                                                           consumer:_consumer
                                                              token:nil
                                                              realm:nil
                                                  signatureProvider:nil
                                                              nonce:nil
                                                          timestamp:nil];
Run Code Online (Sandbox Code Playgroud)

现在,请记住,这只会使警告无声.由于你的_requestTokenUrlis nullable和方法需要一个nonnull对象,你应该检查是否_requestTokenUrl实际上是非零的.所以更合适的版本看起来像这样:

NSURL *url = _requestTokenUrl;
if (url != nil) {
    self.requestTokenRequest = [[OAMutableURLRequest alloc] initWithURL:url
                                                               consumer:_consumer
                                                                  token:nil
                                                                  realm:nil
                                                      signatureProvider:nil
                                                                  nonce:nil
                                                              timestamp:nil];
} else {
    // `_requestTokenUrl` was nil, act accordingly
}
Run Code Online (Sandbox Code Playgroud)

但是仍然需要对变量进行分配.