2015-09-15 39 views
1

我发现这个code on github,使用@conversion属性的自定义类型转换。Swift 2.0中的@conversion属性

class GrayShark { 
    var name:String 
    var howSwim:String 

    init(name:String, howSwim:String) { 
     self.name = name 
     self.howSwim = howSwim; 
    } 
} 

func letSharkSwim(shark:GrayShark) -> String { 
    return "\(shark.name) swims like '\(shark.howSwim)'." 
} 

extension NilType { 
    @conversion func __conversion() -> (GrayShark) { 
     return GrayShark(name:"Gray Shark", howSwim:"UNBELIEVABLE POWERRRRRRRR") 
    } 
} 

我试图让扩展UINT它返回雨燕2.0的基数8字符串表示,但我得到了错误,说error: unknown attribute 'conversion' @conversion func __conversion() -> String

那么,有什么新的方式在雨燕2.0创建自定义转换功能?

+2

见http://stackoverflow.com/a/24945349/1187415(带有链接到开发者论坛)。 '__conversion'从未打算成为一种公共方法,很久以前就被删除了。 –

回答

1

我不能使用@conversion关键字夫特2或者(这是无论如何一个未公开的API,所以它可能已经没有警告移除)。

但你并不需要任何幻想,让您UInt扩展与斯威夫特2反正:

extension UInt { 
    var radix8Representation: String { 
     return String(self, radix: 8) 
    } 
} 

let x = UInt(16) 
print(x.radix8Representation) // "20" 
+0

是的,谢谢,我知道String(_:radix :)初始值设定项(我只是将它用作转换关键字的一个测试),但是我想用转换为'let r8 = 1234 as String'或' test(n:1234)',其中'n'是'String'。 – b1nary

+0

我现在明白你想要的是什么,谢谢,当我第一次提出答案时并不清楚,对此抱歉。但正如我在我编辑的答案中所说的,我无法再找到@转换私有API ......它可能已被删除或重命名,我找不到任何有关它的非过时信息。 – Moritz

+0

看起来这个隐式转换功能已经在Xcode 6 beta 6中被移除(参见[this](https://github.com/ksm/SwiftInFlux#other-changes-in-xcode-60-beta-6),但是我找不到官方消息)。你发现的代码片段必须比Swift1.2旧,现在已经过时了。 – Moritz