消除iOS警告

作者: FishSha | 来源:发表于2017-05-12 16:42 被阅读516次

    ⚠️Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

    XCode 6.3的新特性:nullability annotations。

    现在都有用到Swift,有个属性为optional,即!和?,!表示non-optional,?表示optional,而在Object-C中则没有这个区分,如果混编的话就会出现问题了,Swift调用OC对象的时候,应为OC的对象是默认不设值的,Swift就不知道OC的对象是optional还是non-optional,但还好,编译器默认情况下会隐式的将OC对象当作non-optional。

    所以在6.3中新增了两个类型注释:

    __nullable:表示对象可以为NULL和nil;

    __nonnull:表示对象可为NULL和nil;

    报警告的原因就是没有遵守这个规则。

    解决方案:

    pointer is missing a nullability type specifier

    根据上下文加入__nonnull或者__nullalble。

    函数:

    - (void)uploadProfileForPatient:(PatientInfo * __nonnull)patient completion:(void(^ _Nullable)(void))completionBlock;

    属性0:

    @property(nonatomic, strong, nonnull)NSDate *lastRefreshMessageTime;

    属性1:

    @property(nonatomic, strong)NSDate * __nonnull lastRefreshMessageTime;

    推荐属性0的写法,看着清楚啊。

    如果不确定,可以使用_Null_unspecified,未确定的,不引起警告。

    当然每个该警告都这样去写很麻烦,官方提供了一个Marco宏 NS_ASSUME_NONULL_BEGINNS_ASSUME_NONULL_END

    Nonnull Macro

    ⚠️Method possibly missing a [super awakeFromNib] call

    复写继承的父类方法

    - (void)awakeFromNib

    {

    [super awakeFromNib];

    [self.button useThemeBg];

    }

    ⚠️ 'M_PI_2' is deprecated: Please use 'Double.pi / 2' or '.pi / 2' to get the value of correct type and avoid casting.

    M_PI在Swift 3.0中以及废弃了,建议使用Double.pi / *代替。

    一个PI代表180度,“_2”代表180 * 1/2,即90度;

    ⚠️Conditional downcast from 'NSString?' to 'String' is a bridging conversion; did you mean to use 'as'?

    Optional conversion string

    if let chars = tempCharacters as String? {

    matchedCharacters = matchedCharacters + chars

    }

    因为if会在隐式的做一次unwarpped拆包,所以得到的chars是String类型

    相关文章

      网友评论

        本文标题:消除iOS警告

        本文链接:https://www.haomeiwen.com/subject/hfaztxtx.html