Ios 可选基元类型的字符串初始值设定项:Int?双重的浮动等

Ios 可选基元类型的字符串初始值设定项:Int?双重的浮动等,ios,swift,string,initialization,type-systems,Ios,Swift,String,Initialization,Type Systems,是否可以在不单独指定每个类型的情况下为上述所有类型提供扩展 例如,下面是对Double的扩展: 如果可以使用原始类型初始化字符串,我希望允许使用可选类型初始化字符串。不要声明自定义初始值设定项,只需使用map将值映射到字符串即可: 与其声明自定义初始值设定项,不如使用map将值映射到字符串,如下所示: 你是说像这样的事吗 extension String { init?<T : CustomStringConvertible>(_ value : T?) {

是否可以在不单独指定每个类型的情况下为上述所有类型提供扩展

例如,下面是对Double的扩展:


如果可以使用原始类型初始化字符串,我希望允许使用可选类型初始化字符串。

不要声明自定义初始值设定项,只需使用map将值映射到字符串即可:


与其声明自定义初始值设定项,不如使用map将值映射到字符串,如下所示:


你是说像这样的事吗

extension String {
    init?<T : CustomStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(describing: value)
    }
}


你是说像这样的事吗

extension String {
    init?<T : CustomStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(describing: value)
    }
}


opt.map{String$0}opt.map{String$0}回答得好,我可以问你一个问题吗,你是怎么知道这个协议的,特别是第二个协议,你掌握了Swift标准库吗?我建议不要这样做。这就是地图的用途。同样地,我们不必重新定义每一个采用t的API来获得一个采用[t]的版本,因为我们可以只使用array.mapf,我们不应该定义每一个采用t的API来获得一个采用t?的版本?。这就是Optional.map的作用。谢谢。接受你的答案,因为它回答了问题。但是,在本例中,我将使用mapString.init。好的答案,我可以问你一个问题,你是如何知道这个协议的,特别是第二个协议,你掌握了Swift标准库吗?我建议不要这样做。这就是地图的用途。同样地,我们不必重新定义每一个采用t的API来获得一个采用[t]的版本,因为我们可以只使用array.mapf,我们不应该定义每一个采用t的API来获得一个采用t?的版本?。这就是Optional.map的作用。谢谢。接受你的答案,因为它回答了问题。但是,在本例中,我使用mapString.init,不需要使用闭包。可以将字符串初始值设定项传递给映射方法opt.mapString.init。请注意,您正在映射opt而不是optInt,并且optDoubleNo不需要使用闭包。可以将字符串初始值设定项传递给映射方法opt.mapString.init。请注意,您正在映射opt,而不是optInt和optDouble
extension String {
    init?<T : CustomStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(describing: value)
    }
}
extension String {
    init?<T : LosslessStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(value)
    }
}