赞
踩
最近几天,更新了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分钟不到就解决了。条理清晰,逻辑缜密的解决问题思路很值得学习
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。