Pau*_*sar 8 struct any ios swift anyobject
我想为我的项目创建一个这样的方法:
func print(obj: AnyObject) {
if let rect = obj as? CGRect {
println(NSStringFromCGRect(rect))
}
else if let size = obj as? CGSize {
println(NSStringFromCGSize(size))
}
//...
}
Run Code Online (Sandbox Code Playgroud)
但我不能因为CGRect和CGSize是structS和不符合AnyObject protocol.那么,关于如何做到这一点的任何想法?
@ nkukushkin的答案是正确的,但是,如果你想要的是一个行为不同的函数,取决于它是通过a CGRect还是a CGStruct,你最好重载:
func print(rect: CGRect) {
println(NSStringFromCGRect(rect))
}
func print(size: CGSize) {
println(NSStringFromCGSize(size))
}
Run Code Online (Sandbox Code Playgroud)
相比之下,这Any将是效率低下的(将结构转换为Any返回,如果你在紧密循环中执行此操作会产生很大影响),并且非类型安全(您可以将任何内容传递给该函数,并且它只会在运行时失败).
如果您打算将两种类型强制转换为公共类型,然后对其执行相同的操作,则可以创建采用该类型的第3次重载,并让其他两种类型调用它.
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |