⚠️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_BEGIN和NS_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 stringif let chars = tempCharacters as String? {
matchedCharacters = matchedCharacters + chars
}
因为if会在隐式的做一次unwarpped拆包,所以得到的chars是String类型
网友评论