2

我被困在将#define和weak从objective c转换为swift。我尝试使用objective c to swift转换器,但我认为转换的结果不正确。

#define WeakRef(__obj) __weak typeof(self) __obj = self
#define WeakReturn(__obj) if(__obj ==nil)return;
WeakRef(weakSelf);
WeakReturn(weakSelf);

对于第二、三、四行,我认为在 Swift 中应该是这样的

func WeakReturn(obj: Any?) {
    if obj == nil {
        return
    }
}
WeakRef(self)
WeakReturn(self)

在我对第一行的猜测中,它首先检查typeof(self) == ??. 如果为真,则将指针 (__obj) 设置为 self。但是,我不确定是什么?应该。

4

1 回答 1

2

WeakRef只是给你一个对某个对象的弱引用,而在 Swift 中,这只是weak var foo = obj; 它不需要实用方法。

WeakReturn不能在 Swift 中复制,因为 Obj-C 宏用于在函数中插入条件返回。Swift 中没有宏,而您定义的 SwiftWeakReturn函数绝对什么也不做——它返回对象是否nil存在;您所做的就是使这些返回之一明确。我的猜测是这个宏被添加到 Obj-C 代码中是为了避免一些懒惰的程序员编写if obj == nil return;.

于 2017-06-04T22:27:21.270 回答