自动生成 Swift-Header 断在 Xcode 8
Automatically generated Swift-Header broken in Xcode 8
当我尝试使用 Xcode 8 beta 构建我的应用程序时(在使用 built-in 工具将我的 Swift 2.2 转换为 Swift 3 之后),自动生成Swift header (TargetName-Swift.h
) 有一些错误。多行出现 3 个不同的错误。
例如本节中的示例:
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, copy) NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull CANewsFilterBlacklist;)
+ (NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull)CANewsFilterBlacklist;
+ (void)setCANewsFilterBlacklist:(NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull)newValue;
第 1 行:
TargetName-Swift.h:562:90: Too many arguments provided to function-like macro invocation
和
TargetName-Swift.h:562:1: Unknown type name 'SWIFT_CLASS_PROPERTY'
第 2 行:
TargetName-Swift.h:563:1: Expected identifier or '('
这是属于上面代码的Swift-Code:
public static var CANewsFilterBlacklist:[[String:String]] {
get {
if let data = iCloudStorageStatic.object(forKey: CAUserDefaultsNewsFilterBlacklistKey) as? [[String:String]] {
return data
} else {
return [[String:String]]()
}
}
set (newValue) {
iCloudStorageStatic.set(newValue, forKey: CAUserDefaultsNewsFilterBlacklistKey)
}
}
我不知道,我的 Swift-Code 怎么了? Xcode 没有显示 Swift 代码中的任何错误。它只会生成损坏的 Swift-Header.
这是 Xcode 8 中的错误吗(在 Xcode 7 中,一切都按预期工作)?
遇到了同样的问题,并注意到该方法使用的 objects 在 Objective-C 中不可用,在您的情况下
[[String:String]]
是 swift 特定的,请尝试改用 NSDictionary
也不确定 swift 中的属性是否可以由编译器通过生成的 header,
直接转换为 Objective-C 等价物
如果您不从外部使用 CANewsFilterBlacklist,将其声明为私有可能也是一种解决方法,
希望苹果以后能有适当的修复
正如 rickster 所说,这是 Xcode 中的一个错误,已在版本 8.0 beta 2 中解决。
https://openradar.appspot.com/26786528
当我尝试使用 Xcode 8 beta 构建我的应用程序时(在使用 built-in 工具将我的 Swift 2.2 转换为 Swift 3 之后),自动生成Swift header (TargetName-Swift.h
) 有一些错误。多行出现 3 个不同的错误。
例如本节中的示例:
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, copy) NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull CANewsFilterBlacklist;)
+ (NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull)CANewsFilterBlacklist;
+ (void)setCANewsFilterBlacklist:(NSArray<NSDictionary<NSString *, NSString *> *> * _Nonnull)newValue;
第 1 行:
TargetName-Swift.h:562:90: Too many arguments provided to function-like macro invocation
和
TargetName-Swift.h:562:1: Unknown type name 'SWIFT_CLASS_PROPERTY'
第 2 行:
TargetName-Swift.h:563:1: Expected identifier or '('
这是属于上面代码的Swift-Code:
public static var CANewsFilterBlacklist:[[String:String]] {
get {
if let data = iCloudStorageStatic.object(forKey: CAUserDefaultsNewsFilterBlacklistKey) as? [[String:String]] {
return data
} else {
return [[String:String]]()
}
}
set (newValue) {
iCloudStorageStatic.set(newValue, forKey: CAUserDefaultsNewsFilterBlacklistKey)
}
}
我不知道,我的 Swift-Code 怎么了? Xcode 没有显示 Swift 代码中的任何错误。它只会生成损坏的 Swift-Header.
这是 Xcode 8 中的错误吗(在 Xcode 7 中,一切都按预期工作)?
遇到了同样的问题,并注意到该方法使用的 objects 在 Objective-C 中不可用,在您的情况下
[[String:String]]
是 swift 特定的,请尝试改用 NSDictionary 也不确定 swift 中的属性是否可以由编译器通过生成的 header,
直接转换为 Objective-C 等价物如果您不从外部使用 CANewsFilterBlacklist,将其声明为私有可能也是一种解决方法,
希望苹果以后能有适当的修复
正如 rickster 所说,这是 Xcode 中的一个错误,已在版本 8.0 beta 2 中解决。 https://openradar.appspot.com/26786528