将 initWithString 从 objective C 转换为 Swift
Converting initWithString from objective C to Swift
我是 swift 和 objective C 编程语言的新手。我有点困惑,因为我必须将代码从 objective C 迁移到 swift。
Objective C代码如下:
- (name *)initWithString:(NSString *)name num:(NSNumber *)num {
self = [super init];
if (self) {
self.name = name;
self.num = num;
}
return self;
}
+ (instancetype)initWithString:(NSString *)name num:(NSNumber *)num {
return [[self alloc] initWithString:name num:num] ;
}
从我的理解到现在,我已经到了swift的这一部分:
func init(name: String?, num: NSNumber?) {
super.init()
self.name = name
self.num = num
return self
}
class func init(name: String?, num: NSNumber?) -> Self {
return self.init(name: name, num: num)
}
但是,我仍然对如何将 initWithString 转换为 swift 初始化程序感到困惑。从文档中,我只得到了它的基本语法。
- 如何解决这个问题?
- initWithString 和普通 init 有什么区别?
- 我认为
-
表示实例方法,+
表示静态方法。有没有人可以介绍一下。
您的 Swift 代码有几个问题。首先,当您创建一个 init
时,没有 func
关键字,init
本身就是表明这是一个 init
而不是简单函数的关键字。其次,在 Swift 初始化器中没有 return
语句(除非它是一个可失败的初始化,但即使那样你也只能 return nil 来使初始化失败)。您只需为所有存储的属性分配一个值,无需 return self(与 Obj-C 不同)。也不需要调用 super.init()
,因为 Swift classes 不需要从基础 class 继承(不像 Obj-C 中 NSObject
是基础 class).
也不需要添加静态方法,因为在 Swift 中您可以直接在类型名称上调用 init,例如 let instance = Something(name: "name", num: 1)
.
所以这 2 个 Obj-C 方法在 Swift 中转换为:
class Something {
let name: String?
let num: NSNumber?
init(name: String?, num: NSNumber?) {
self.name = name
self.num = num
}
}
关于Obj-C代码本身的问题:
你明白了-
和+
之间的区别,-
表示实例方法,而+
表示类型方法。
普通初始化- (name *)initWithString:(NSString *)name num:(NSNumber *)num
和类型函数+ (instancetype)initWithString:(NSString *)name num:(NSNumber *)num
的区别在于当你调用一个Obj-C初始化时,你需要做[[Type alloc] initWithString]
,而使用静态方法,无需调用 alloc
,只需调用 [Type initWithString]
.
我是 swift 和 objective C 编程语言的新手。我有点困惑,因为我必须将代码从 objective C 迁移到 swift。
Objective C代码如下:
- (name *)initWithString:(NSString *)name num:(NSNumber *)num {
self = [super init];
if (self) {
self.name = name;
self.num = num;
}
return self;
}
+ (instancetype)initWithString:(NSString *)name num:(NSNumber *)num {
return [[self alloc] initWithString:name num:num] ;
}
从我的理解到现在,我已经到了swift的这一部分:
func init(name: String?, num: NSNumber?) {
super.init()
self.name = name
self.num = num
return self
}
class func init(name: String?, num: NSNumber?) -> Self {
return self.init(name: name, num: num)
}
但是,我仍然对如何将 initWithString 转换为 swift 初始化程序感到困惑。从文档中,我只得到了它的基本语法。
- 如何解决这个问题?
- initWithString 和普通 init 有什么区别?
- 我认为
-
表示实例方法,+
表示静态方法。有没有人可以介绍一下。
您的 Swift 代码有几个问题。首先,当您创建一个 init
时,没有 func
关键字,init
本身就是表明这是一个 init
而不是简单函数的关键字。其次,在 Swift 初始化器中没有 return
语句(除非它是一个可失败的初始化,但即使那样你也只能 return nil 来使初始化失败)。您只需为所有存储的属性分配一个值,无需 return self(与 Obj-C 不同)。也不需要调用 super.init()
,因为 Swift classes 不需要从基础 class 继承(不像 Obj-C 中 NSObject
是基础 class).
也不需要添加静态方法,因为在 Swift 中您可以直接在类型名称上调用 init,例如 let instance = Something(name: "name", num: 1)
.
所以这 2 个 Obj-C 方法在 Swift 中转换为:
class Something {
let name: String?
let num: NSNumber?
init(name: String?, num: NSNumber?) {
self.name = name
self.num = num
}
}
关于Obj-C代码本身的问题:
你明白了-
和+
之间的区别,-
表示实例方法,而+
表示类型方法。
普通初始化- (name *)initWithString:(NSString *)name num:(NSNumber *)num
和类型函数+ (instancetype)initWithString:(NSString *)name num:(NSNumber *)num
的区别在于当你调用一个Obj-C初始化时,你需要做[[Type alloc] initWithString]
,而使用静态方法,无需调用 alloc
,只需调用 [Type initWithString]
.