swift2 我如何用Swift从Objective-C初始化一个示例类型

xmjla07d  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(179)

我有一个API,我必须把它从Objective-C翻译成Swift。我被一些我不太了解的构造函数或初始化所困。
以下是.h文件的格式:

+ (instancetype) newProductionInstance;
+ (instancetype) newDemoInstance;

以下是.m文件的格式:

+ (instancetype) newProductionInstance
{
    return [[self alloc] initWithBaseURLString:productionURL];
}

+ (instancetype) newDemoInstance
{
    return [[self alloc] initWithBaseURLString:demoURL];
}

- (instancetype)initWithBaseURLString:(NSString *)urlString
{
    if (self = [self init])
    {
        _apiURL = [NSURL URLWithString:urlString];
    }
    return self;
}

这是他们对我正在翻译的主文件的调用:

mobileApi = [MobileAPI newDemoInstance];

因此,我只想将最后一行转换为Swift 2。

gz5pxeao

gz5pxeao1#

var mobileApi = MobileAPI.newDemoInstance()

let mobileApi = MobileAPI.newDemoInstance()

如果您不打算修改它。

wgx48brx

wgx48brx2#

它简单地MobileAPI.newDemoInstance()

let mobileApi = MobileAPI.newDemoInstance()

**注意:**不要忘记在Bridging-Header.h文件中导入MobileAPI.h

rlcwz9us

rlcwz9us3#

我希望这对你有帮助

class YourClass: NSObject {
    //Class level constants
    static let productionURL = "YourProductionURL"
    static let demoURL = "YourDemoURL"

    //Class level variable
    var apiURL : String!

    //Static factory methods
    static func newProductionInstance() -> YourClass {
        return YourClass(with : YourClass.productionURL)
    }

    static func newDemoInstance() -> YourClass {
        return YourClass(with : YourClass.demoURL)
    }

    // Init method
    convenience init(with baseURLString : String) {
        self.init()
        self.apiURL = baseURLString

        //Calling
        let yourObject : YourClass = YourClass.newDemoInstance()
    }
}
3pvhb19x

3pvhb19x4#

在objective-c中创建示例类型的最佳选择是使用**“default”**关键字。此关键字已在Apple的标准库中使用。例如,NSNotificationCenter.default或NSFileManager. default。要在.h文件中声明它,您应编写

+(instancetype) default;

在你的.m文件中

static YOUR_CLASS_NAME *instance = nil;

+(instancetype) default {
if instance == nil { instance = [[super allocWithZone:NULL] init];}
return instance;
}

相关问题