2017-08-29 83 views
0

我想要一個函數來返回一個可以初始化的類型(可能以特定的方式,例如使用特定的參數)。在許多其他方面獲得相同的結果是可能的,但我特別尋找這種語法糖。 我不知道它是否能在類似於這樣的方式來完成:有可以初始化的Swift函數返回類型

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")() 

回答

1

你可以做這樣的事情:

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"