试图实现以下类函数是什么?

时间:2016-01-08 20:04:06

标签: objective-c swift class

我正在尝试将以下的开源Objective C代码转换为swift,但是我很难绕过这个类函数试图实现的目标。我知道它是一个类方法,我添加了我在底部重写的内容。

+ (instancetype)eventWithTitle:(NSString *)title day:(NSUInteger)day startHour:(NSUInteger)startHour durationInHours:(NSUInteger)durationInHours
{
    return [[self alloc] initWithTitle:title day:day startHour:startHour durationInHours:durationInHours];
}

如果有帮助的话,这是它引用的方法。

- (instancetype)initWithTitle:(NSString *)title day:(NSUInteger)day startHour:(NSUInteger)startHour durationInHours:(NSUInteger)durationInHours
{
    self = [super init];
    if (self != nil) {
        _title = [title copy];
        _day = day;
        _startHour = startHour;
        _durationInHours = durationInHours;
    }
    return self;
}

Swift版

    class func eventWithTitle(title: String, day: UInt32, startHour: UInt32, durationInHours: UInt32) {

        self.init(title: title, day: day, startHour: startHour, durationInHours: durationInHours)
    }

    init(title: String, day: UInt32, startHour: UInt32, durationInHours: UInt32) {

        self.title = title
        self.day = day
        self.startHour = startHour
        self.durationInHours = durationInHours

    }

运行此代码时出现的错误如下:

  

初始化程序的结果未使用。

2 个答案:

答案 0 :(得分:2)

来自文档:

  

类工厂方法和便利初始化程序

     

为了一致性和简单性,Objective-C类工厂方法是   在Swift中作为便利初始化器导入。这允许他们   使用与初始化程序相同的语法。

这意味着,只有便利初始化程序,工厂方法被删除。

init(title : String, day : Int, startHour : Int, durationInHours : Int)

答案 1 :(得分:-1)

它基本上只是一种工厂方法。正如您在Objective-C版本中注意到的那样,从该方法返回alloc' d / init< d'd实例。因此,您希望将Swift功能更改为:

ssh user@45.12.129 "cd ~/scripts; pwd; ./startVM.sh"