swift - 具有可以初始化的 Swift 函数返回类型

标签 swift syntactic-sugar

我想要一个函数返回一个可以初始化的类型(可能以特定方式,例如使用特定参数)。可以通过许多其他方式获得相同的结果,但我特别在寻找这种语法糖。 我想知道是否可以用类似这样的方式来完成:

protocol P {
    init()
}

extension Int: P {
    public init() {
        self.init()
    }
}

// same extension for String and Double

func Object<T: P>(forType type: String) -> T.Type? {

    switch type {

    case "string":
        return String.self as? T.Type


    case "int":
        return Int.self as? T.Type

    case "double":
        return Double.self as? T.Type

    default:
        return nil
    }
}

let typedValue = Object(forType: "int")()

最佳答案

你可以这样做:

protocol Initializable {
    init()
}

extension Int: Initializable { }

extension String: Initializable { }

func object(type: String) -> Initializable.Type? {
    switch type {
    case "int":
        return Int.self
    case "string":
        return String.self
    default:
        break
    }
    return nil
}

let a = object(type: "string")!.init()
print(a)  // "\n"

关于swift - 具有可以初始化的 Swift 函数返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45936925/

相关文章:

ios - 查询和 Firebase 中的位置(swift 3)

python - 常量和糖

haskell - Haskell 脱糖有什么好处?

javascript - javascript正则表达式和swift正则表达式之间的区别

ios - 快速添加图标和文本以滑动单元格操作

ios - 使用 If-Let 并在一行中检查输出

swift - 使用 NVActivityIndi​​catorView 和 Timer,显示很短的时间

c# - 使用语法糖/内置功能

java - 更清晰地访问静态字段和方法?

c++ - 这个特定的结构如何发挥这样的作用? (arcsynthesis现代3D图形编程)