我使用了一个名为 LinqToObjectiveC 的库在我的项目中,现在我想在 swift 文件中使用它。该库使用复杂的 Objective-C 宏,无法在 swift 中访问。我想知道如何将这个宏转换为 swift:
#define LINQKey(__key) (^id(id item){return [item valueForKey:@#__key];})
最佳答案
首先让我们解释一下该宏的作用。
它接受一个名为 __key
的参数,将其字符串化(@
和 #
)并返回一个将接受一个对象的闭包( block )作为参数并返回 item.valueForKey(key)
的结果。
我们无法将字符串化转换为 Swift,但是,即使在 Obj-C 中也不应该使用它。当我们可以拥有 LINQKey(@"myKey")
时,为什么还要拥有 LINQKey(myKey)
?
作为一个返回闭包的简单函数:
func LINQKey(key: String) -> (AnyObject! -> AnyObject!) {
return { (item: AnyObject!) in
return item.valueForKey(key)
}
}
关于objective-c - 将复杂的 Objective-C 宏转换为 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37508909/