自动生成的 Swift-Header 在 Xcode 8 中损坏

Posted

技术标签:

【中文标题】自动生成的 Swift-Header 在 Xcode 8 中损坏【英文标题】:Automatically generated Swift-Header broken in Xcode 8 【发布时间】:2016-06-17 09:40:34 【问题描述】:

当我尝试使用 Xcode 8 beta 构建我的应用程序时(在使用内置工具将我的 Swift 2.2 转换为 Swift 3 之后),自动生成的 Swift 标头 (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 代码有什么问题? Xcode 不会在 Swift 代码中显示任何错误。它只是生成损坏的 Swift-Header。

这是 Xcode 8 中的错误吗(在 Xcode 7 中,一切都按预期工作)?

【问题讨论】:

看起来像 Xcode 8 beta 中的一个错误。 Please report it. 【参考方案1】:

正如 rickster 所说,这是 Xcode 中的一个错误,已在 8.0 beta 2 版本中解决。 https://openradar.appspot.com/26786528

【讨论】:

这有什么更新吗?我在 Xcode10 上遇到了类似的错误。这个问题有什么解决方法吗?【参考方案2】:

遇到了同样的问题,并注意到在你的情况下,该方法使用了 Objective-C 中不可用的对象

[[字符串:字符串]]

是 swift 特定的,尝试使用 NSDictionary 代替 也不知道swift中的属性是否可以通过生成的头文件直接由编译器转换为Objective-C等价物,

如果您不使用外部的 CANewsFilterBlacklist,将其声明为私有也可能是一种解决方法,

希望苹果稍后会提供适当的修复

【讨论】:

以上是关于自动生成的 Swift-Header 在 Xcode 8 中损坏的主要内容,如果未能解决你的问题,请参考以下文章

具有自动布局的 UITableviewCell 约束失败

在 XCode 中导航自动完成条目

从 UICollectionViewCell 到 ViewController 的自动布局约束

在 appstore 上交付应用程序:卡在验证步骤

如何重新生成 iPhone Xcode info.plist 文件

未启用 PayPalPaymentViewController 用户交互