您的位置:首页 > 移动开发 > Swift

xcode自动生成project-swift.h出错

2015-09-23 23:02 441 查看
最近几天,更新了xcode7,由于工程是swift和OC混编,所以工程会自动生成一个project-swift.h文件。前段时间一直用xcode6.4,一直没问题,更新到7之后,问题来了:生成的文件出错。

出错行报错如下:

/Users/lindow/Library/Developer/Xcode/DerivedData/YsCalendar-hcppxdyfluizfvalogsccedszjxo/Build/Intermediates/YsCalendar.build/Release-iphonesimulator/YsCalendar.build/DerivedSources/YsCalendar-Swift.h:190:1: Expected identifier or '(

仔细看出错行

\Note 
/// It is currently not possible to use generics with a subclass of NSObject
///
/// <ul><li>This class is a wrapper around an objects that should be cached to disk.</li><li></li><li><code> However, NSKeyedArchiver needs a concrete subclass of NSObject to work correctly
/// 
/// </code></li></ul>
SWIFT_CLASS("_TtC10YsCalendar11CacheObject")
@interface CacheObject : NSObject <NSCoding>
@property (nonatomic,readonly) id__nonnull value;
@property (nonatomic,readonly) NSDate * __nonnull expiryDate;


很明显看到的是生成的\Note这一行出错。

开始一筹莫展,不知道为什么会出现这种情况,另外2个同事,和我一样的xcode版本,一样的代码但是编译毫无问题。

那么就开始网上找答案,可惜网上也没用人遇到过。后来遇到一大牛,才解决。

大牛的分析思路如下:

1.首先定位到出错文件,这段是在编译CacheObject.swift这个文件的时候出现的。可以从下面的SWIFT_CLASS中得知

2.打开出错文件,得到内容如下:

import Foundation

/**
 * This class is a wrapper around an objects that should be cached to disk.
 *
 * NOTE: It is currently not possible to use generics with a subclass of NSObject
 * However, NSKeyedArchiver needs a concrete subclass of NSObject to work correctly
 */
class CacheObject : NSObject, NSCoding {
let value:AnyObject
let expiryDate:NSDate


3.定位到出错处,注释的地方

4.得到原因,NOTE为swift的关键字,swift 支持NOTE, DEBUT, TODO, MARK等这些关键字。所以可能是xcode读取注释出错造成

5.更改注释处,删掉或者用///注释皆可

6.问题完美解决

出了问题不要怕,尽管这个问题很怪,但是大牛也只花了20分钟不到就解决了。条理清晰,逻辑缜密的解决问题思路很值得学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: