How to create a Swift object in Objective-C?

2019-05-18 00:32发布

问题:

If you define a swift class like this

@objc class Cat {

}

In swift you can just do

var c = Cat()

But how do you make a Cat instance in Objective-C ?

Subclassing NSObject works because you can then "alloc-init" but can we achieve this without subclassing an Objective-C class?

回答1:

The most direct way is to subclass Cat from NSObject. If you can't do that, you will need to make a class method or a function that returns a Cat.

@objc class Cat {
    class func create() -> Cat {
        return Cat()
    }
}
func CreateCat() -> Cat {
    return Cat()
}


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


回答2:

In modern objective-c you can call functions like they were properties:

Swift:

class func create() -> Cat {
    return Cat()
}

Obj-c:

Cat *cat = Cat.create;


回答3:

You can declare +alloc in a dummy category (don't need to implement it):

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

and then you can use regular alloc-init on it:

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

all without needing to change the Swift code.