swift - swift中带有派生类的便利初始化器
问题描述
我想使用扩展初始化器对传入参数进行转换。
我在 swift 5.0 中找不到正确的语法来执行此操作。这可能吗?
我想避免扩展 B 转换所有传入参数(在本例中从字符串到整数),但以某种方式依赖扩展 A init。
import Foundation
class A
{
var x : Int
init (_ x_: Int)
{
x = x_;
}
}
class B : A
{
var y : Int
init (_ x_: Int, _ y_: Int)
{
y = y_
super.init(x_);
}
}
extension A
{
convenience init(_ x_: String) {
self.init(Int(x_)!);
}
}
extension B
{
convenience init(_ x_: String, _ y_: String) {
super.init(x_);
self.y = Int(y_)!;
}
}
let a = A(0)
let b = B(1,2)
let ae = A("3")
let be = B("4","5")
print(a)
print(b)
print(ae)
print(be)
解决方案
好吧,这是我得到的最接近的——我想摆脱那些 .0、.1 的东西,但是......等等。
func F1(_ a: Int, _ b: Int)
{
print(a)
print(b)
}
let F1P = (1,2)
// this doesn't work, what is the syntax for this?
// can't find how to apply a tuple to a function in swift,
// everywhere says it should "just work"
//F1(F1P)
F1(F1P.0, F1P.1) // lame
class A
{
var x : Int
init (_ x_: Int)
{
x = x_;
}
}
class B : A
{
var y : Int
init (_ x_: Int, _ y_: Int)
{
y = y_
super.init(x_);
}
}
extension A
{
convenience init(sx: String) {
self.init(A.transform(sx))
}
public class func transform(_ x_: String) -> Int
{
return (Int(x_)!)
}
}
extension B
{
convenience init(sx: String, sy: String) {
// I want to do this, but it doesn't work
// self.init(B.transform(sx, sy));
let p = B.transform(sx, sy)
self.init(p.0, p.1); // lame
}
public class func transform(_ x_: String, _ y_: String) -> (Int, Int)
{
return (A.transform(x_), Int(y_)!)
}
}
let a = A(0)
let b = B(1,2)
let ae = A(sx:"3")
let be = B(sx:"4", sy:"5")
print(a)
print(b)
print(ae)
print(be)
推荐阅读
- android - 如何实时获取firestore文档列表android
- android - Android PDF 共享 Intent 仅适用于 Whatsapp
- c - 如何将 ac 文件链接到两个可执行文件
- c# - 使用 WebBrowser 控件访问 Shockwave Flash COM 对象
- oracle - 原因:org.hibernate.HibernateException:当未设置“hibernate.dialect”时,对 DialectResolutionInfo 的访问不能为空(在 Oracle DB 上)
- python - 使用 sumproduct 分组
- angular - 找不到“HomeModule”的 NgModule 元数据中的错误
- optaplanner - Optaplanner:终止步数的最佳计数
- performance-testing - 重放 vugen 录制的脚本时出现错误“HTTP Status-Code=400 (Bad Request)”
- python - 如何理解 Seaborn 的热图标注格式?