【发布时间】:2018-09-26 04:17:36
【问题描述】:
我有一个带有 swift 和 ObjC 源的项目,并且在自动生成的头文件中有一条奇怪的消息:
标有错误的代码:
//interface in ModuleName-Swift.h file
@interface PointsList : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithPoints:(NSArray<NSValue *> * /*this marked with warning*/_Nonnull)points OBJC_DESIGNATED_INITIALIZER; //Warning:Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
- (nonnull instancetype)initWithValues:(NSArray<NSValue *> * /*this marked with warning*/_Nonnull)pointValues //Warning:Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
@end
//source PointsList.swift
@objc public class PointsList : NSObject {
var points = Array<CGPoint>()
@objc public override init() {
super.init()
}
@objc public init(withPoints points: Array<CGPoint>) {
self.points.append(contentsOf: points)
super.init()
}
@objc public init(withValues pointValues: Array<NSValue>) {
super.init()
pointValues.forEach { (pointValue) in
self.points.append(pointValue.cgPointValue)
}
}
}
这个文件是由 Xcode 从 swift 的类中生成的。我看到 _Nunnull 修饰符,但 XCode 抱怨我应该添加该修饰符
.也许我忘记了项目配置中的一些设置。
我该如何解决这种奇怪的行为?
UPD
我对 Swift 5 和 Xcode 10.2 有同样的问题。
这很奇怪,因为我项目中的其他文件都以正确的方式处理。
只有 _Nonnull 和 _Nullable 修饰符有问题。 Xcode 忽略它们,如果我在警告消息中按下按钮 Fix,Xcode 会在指针上添加第二个修饰符并且警告不会消失。
【问题讨论】:
-
如果您将相关代码作为文本发布到您的问题中,这将非常有帮助。
-
我已经更新了我的问题。我添加了产生该警告的生成接口和源类的示例。
-
似乎是编译器问题。您尝试过干净的构建吗?
-
是的。没有变化。我在 Xcode 9 和 Xcode 10 中遇到了同样的问题 :(
-
好像少了什么,Swift代码没有编译(self.points未定义)
标签: objective-c swift xcode