Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有可初始化的Swift函数返回类型_Swift_Syntactic Sugar - Fatal编程技术网

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

具有可初始化的Swift函数返回类型,swift,syntactic-sugar,Swift,Syntactic Sugar,我希望函数返回一个类型,该类型可以用特定的方式进行初始化,例如使用特定的参数。在许多其他方面都可以得到相同的结果,但我特别寻找这种语法糖。 我想知道是否可以这样做: protocol P { init() } extension Int: P { public init() { self.init() } } // same extension for String and Double func Object<T: P>(forType

我希望函数返回一个类型,该类型可以用特定的方式进行初始化,例如使用特定的参数。在许多其他方面都可以得到相同的结果,但我特别寻找这种语法糖。 我想知道是否可以这样做:

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"