Swift 编译器宏(警告或停止)
Posted
技术标签:
【中文标题】Swift 编译器宏(警告或停止)【英文标题】:Swift Compiler Macro (Warn or Stop There) 【发布时间】:2015-05-27 13:41:37 【问题描述】:是否有任何可以与 Swift 一起使用的编译器宏?通常情况下,我经常使用模板,这些模板经常需要修改很多部分,自从转向 swift 之后,我已经失去了对 #warning
的喜爱
【问题讨论】:
你是指宏还是指令? 【参考方案1】:你可以使用// MARK
:
// MARK: - UIImagePickerControllerDelegate Methods
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
if let backgroundImageChangedBlock = self.backgroundImageChangedBlock
backgroundImageChangedBlock(backgroundImage: image)
self.dismissViewControllerAnimated(true, completion: nil)
// MARK: - UINavigationControllerDelegate Methods
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool)
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .None)
Xcode 不支持#warning
,但可以使用脚本短语:https://***.com/a/26869489/907422:
将新的运行脚本添加到目标的构建阶段选项卡(项目设置 > 构建阶段 > '+' > 新的运行脚本阶段),并将以下代码粘贴到空框中:
TAGS="WARNING"
echo "searching $SRCROOT for $TAGS"
find "$SRCROOT" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
【讨论】:
谢谢,这不是我希望听到的,但我想经过一天的搜索,我试图避免使用脚本,但这似乎是除了自定义 Xcode 插件之外的唯一出路。 .. @AdrianSluyters 这不是一个好的解决方案,但它确实有效。如果您知道更好的方法,请告诉我...【参考方案2】:Swift 中没有编译器宏或其他 preprocessor directives。您可以设置构建配置,但我怀疑这不是您想要的。
您可以做的是使用documentation 将代码部分标记为需要更改。你也可以编写单元测试,除非你的模板被正确实现,否则它会失败。
Assertions 也可能是让模板化代码失败的好方法,除非它被正确实现。
【讨论】:
我不同意,因为有很多未记录的指令...我刚刚通过反汇编 swift 遇到了一些,请参阅此站点(翻译)以了解人们遇到的其他一些:@987654324 @ @AdrianSluyters 是的,您可能应该避免使用 undocumented internal functions。它们可能会在没有警告的情况下更改或产生意想不到的副作用。 我纯粹将它们用于我的内部模板,所以我不会太在意它们的变化。我更喜欢在编译时完全“停止”的“警告”列表(或由于未满足要求而导致的不祥错误。以上是关于Swift 编译器宏(警告或停止)的主要内容,如果未能解决你的问题,请参考以下文章
c语言宏定义宏函数编译警告:warning: backslash and newline separated by space(后不能有空格)