Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 - Fatal编程技术网

与Swift中的_转换相反,用于指定不同类型的值

与Swift中的_转换相反,用于指定不同类型的值,swift,Swift,Swift提供了一种称为\u conversion的特殊方法,允许您将类型隐式转换为其他类型。我希望能够定义一个方法,允许您采用另一种方式:能够将自定义类型分配给另一个类型,并将其隐式转换为允许分配工作 转发有效的用法: class MyClass<T> { var myValue : T func __conversion() -> T? { return myValue } init(value: T) { s

Swift提供了一种称为
\u conversion
的特殊方法,允许您将类型隐式转换为其他类型。我希望能够定义一个方法,允许您采用另一种方式:能够将自定义类型分配给另一个类型,并将其隐式转换为允许分配工作

转发有效的用法:

class MyClass<T> {
    var myValue : T
    func __conversion() -> T? {
        return myValue
    }
    init(value: T) {
        self.myValue = value
    }
}
func takesString(aString: String?) {
}
var myInstance = MyClass(value: "Hello")
takesString(myInstance)
class MyClass<T> {
    func __conversion(aValue: T) -> MyClass<T> {
        return MyClass(value: T)
    }
}

var myInstance : MyClass<String> = "Hello World" // compiler error
class-MyClass{
var myValue:T
func\uu conversion()->T{
返回myValue
}
初始值(值:T){
self.myValue=value
}
}
func takesString(aString:String?){
}
var myInstance=MyClass(值:“Hello”)
takesString(myInstance)
我想做什么:

class MyClass<T> {
    var myValue : T
    func __conversion() -> T? {
        return myValue
    }
    init(value: T) {
        self.myValue = value
    }
}
func takesString(aString: String?) {
}
var myInstance = MyClass(value: "Hello")
takesString(myInstance)
class MyClass<T> {
    func __conversion(aValue: T) -> MyClass<T> {
        return MyClass(value: T)
    }
}

var myInstance : MyClass<String> = "Hello World" // compiler error
class-MyClass{
函数转换(aValue:T)->MyClass{
返回MyClass(值:T)
}
}
var myInstance:MyClass=“Hello World”//编译器错误

有什么方法可以做到这一点吗?

您是否尝试过向字符串添加扩展名

extension String {
    func __conversion() -> MyClass {
        var myInstance = MyClass()
        myInstance.myString = self
        return myInstance
    }
}
它在iOS操场的Xcode 6 Beta 4中工作

let anInstance: MyClass = "test"

要处理泛型:

class MyClass<T> {
    var myString = ""
    var myT : T?
}

extension String {
    func __conversion<T>() -> MyClass<T> {
        var myInstance = MyClass<T>()
        myInstance.myString = self
        return myInstance
    }
}

let anInstance: MyClass<Int> = "test"

事实证明_u转换是一种私有方法,因此一旦Swift发布,这肯定不可能实现。

是的,我确实尝试过。但是,为了清晰起见,我实际上简化了我真正的问题。我试图用MyClass作为泛型类型来实现这一点,因此我不能像扩展特定类型那样扩展泛型类型。是的,我希望不需要用户显式构造MyClass来完成分配。基本上,我希望我的类型能够像其他类型一样透明地工作,就像Optionals的工作方式一样。@drewag我不确定这是您想要的,但是泛型可以工作。是的,但是我必须为每种可能的类型创建一个扩展。此外,事实证明uu转换是一个私有方法,将在beta版结束前删除,因此整个过程是一个没有意义的点
\uu conversion()->MyClass
方法对于所有
MyClass
类型都是通用的。在实例化时,特定类型被绑定。噢,不!这是否意味着标准库中的所有隐式转换也将消失?我不能肯定,但我想他们会简单地将该功能私有化。然而,我认为标准库中并没有太多的隐式转换。从iOS 8 beta 5开始,它们就消失了:
“\uu转换”函数不再被允许。