消除iOS警告

⚠️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;

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

解决方案:


消除iOS警告_第1张图片
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


消除iOS警告_第2张图片
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警告)