objective-c - 将复杂的 Objective-C 宏转换为 swift

标签 objective-c swift

我使用了一个名为 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/

相关文章:

objective-c - 如何在 Swift 中返回实例类型

ios - NSError 没有被填充

ios - NSArray containsObject 方法不一致的结果

ios - 如何按下 tableview 单元格以在导航 Controller 中显示带有文本的 View Controller

swift - 如何在 SwiftUI View 中自动反射(reflect) Core Data+iCloud 的变化?

ios - AFNetworking http 基本身份验证给出错误 "Your API key was not formatted properly"

ios - 使用 firebase 云消息传递中的 swift 无法将通知接收到 iPhone

ios - AVPlayer 运行时无法滑动 UIScrollView

ios - 位置管理器不会停止更新

iphone - 如何按字母顺序对带有字典对象的 NSArray 进行排序?