Swift 自定义类型转换

Swift 自定义类型转换,swift,types,casting,swift2,Swift,Types,Casting,Swift2,如何在Swift中实现自定义类型转换 似乎as是一个可以在类上自定义实现的操作符,但我找不到任何关于它的文档 用例示例:您可能希望将SwiftString类型转换为自定义类,如UCS4String,它实现了自己的方法和内部表示 如果as不能用于此目的,那么首选模式是什么?您只能将某个对象转换为实际可能的对象。例如,您可以将一个类转换为一个子类。(例如,如果视图是UIImageView,但对它的引用以UIView引用开始,则可以使用as!运算符将其向下转换为UIImageView。)但字符串不是类

如何在Swift中实现自定义类型转换

似乎
as
是一个可以在类上自定义实现的操作符,但我找不到任何关于它的文档

用例示例:您可能希望将Swift
String
类型转换为自定义类,如
UCS4String
,它实现了自己的方法和内部表示


如果
as
不能用于此目的,那么首选模式是什么?

您只能将某个对象转换为实际可能的对象。例如,您可以将一个类转换为一个子类。(例如,如果视图是UIImageView,但对它的引用以UIView引用开始,则可以使用
as!
运算符将其向下转换为UIImageView。)但字符串不是类,因此不能以这种方式向下转换

类似地,不能在数字类型之间转换:例如,不能将Int转换为UInt,反之亦然

相反,您需要为您的类型提供一个初始值设定项,以便可以基于旧实例强制您的类型的实例。这就是从Int得到UInt的方式:

let i2 = UInt(i)
所以在你的情况下:

let s2 = UCS4String(string:s)

仍然让str:String=“swiftstring”让nstr=str作为NString工作正常。我认为问题是“我们能覆盖as操作符吗?”但我的答案回答了这个问题。在幕后,String和NSString是相同的类型,因此可以进行强制转换@用户3441734幕后也有同样的情况吗????陛下我不同意。我可能是错的,但我非常确信,本机字符串和基础NString类的性质是不同的。铸造操作符是在标准swift库中定义的,可能现在,当开源swift可用时,我们可以检查源代码。。。所以,现在我们不能让演员操作工超载。@user3441734你可以“非常肯定”你喜欢的任何东西。但它们都是一样的。强制转换对底层存储没有任何更改。这就是为什么演员阵容是可能的。他们被搭桥了。您可能想阅读我的书:Casting:bridgeing:String作为NSString桥接到Objective-C,而源自Objective-C的字符串可能会将其字符存储在NSString中。由于NSSString的任何任意子类都可以成为字符串,因此在这种情况下无法保证表示或效率。