如何在Objective-C中创建一个Swift对象?

5
如果您定义一个 Swift 类,代码如下:
@objc class Cat {

}

在 Swift 中,您只需执行以下操作:
var c = Cat()

但是在Objective-C中如何创建一个Cat实例呢?

通过子类继承NSObject可以实现"alloc-init",但我们能否在不继承Objective-C类的情况下实现呢?


也许这篇文章能帮到你。 - user2340612
3个回答

4
最直接的方法是从NSObject中派生出Cat子类。如果您无法这样做,您需要创建一个返回Cat的类方法或函数。
@objc class Cat {
    class func create() -> Cat {
        return Cat()
    }
}
func CreateCat() -> Cat {
    return Cat()
}


Cat *cat = [Cat create];
Cat *cat = CreateCat();

1
在现代的Objective-C中,您可以像调用属性一样调用函数:
Swift:
class func create() -> Cat {
    return Cat()
}

Obj-c:

Cat *cat = Cat.create;

虽然由于编译器的实现方式,可以通过这种方式调用类方法,但通常不建议这样做。点符号明确用于访问ObjC中的属性。请参阅“点语法是访问器方法调用的简洁替代方法”https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW5 “点语法纯粹是访问器方法调用的便捷包装器。” - Rob Napier

0

您可以在虚拟类别中声明+alloc(不需要实现它):

@interface Cat (Alloc)
+ (instancetype)alloc;
@end

然后你可以在它上面使用常规的alloc-init:

Cat *cat = [[Cat alloc] init];

所有这些都不需要更改 Swift 代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接