Alexis
Alexis

Reputation: 16829

How to create a Swift object in Objective-C?

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?

Upvotes: 5

Views: 5638

Answers (3)

newacct
newacct

Reputation: 122419

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.

Upvotes: 0

Tapani
Tapani

Reputation: 3231

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;

Upvotes: 1

Rob Napier
Rob Napier

Reputation: 299265

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();

Upvotes: 4

Related Questions