首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Float,Double,Int是AnyObject吗?

Float,Double,Int是AnyObject吗?
EN

Stack Overflow用户
提问于 2015-09-14 04:43:55
回答 2查看 5.6K关注 0票数 20

我读到了Swift的内联文档,我有点困惑。

1) Any是所有类型都隐式遵守的协议。

2) AnyObject是所有类都隐式遵守的协议。

3) IntFloatDouble都是结构体

下面是一个示例代码:

代码语言:javascript
复制
import UIKit

func passAnyObject(param: AnyObject) {
    print(param)
}

class MyClass {}
struct MyStruct {}

let a: Int = 1
let b = 2.0
let c = NSObject()
let d = MyClass()
let e = MyStruct()

passAnyObject(a)
passAnyObject(b)
passAnyObject(c)
passAnyObject(d)
//passAnyObject(e) // Argument type 'MyStruct' does not conform to expected type 'AnyObject'


if a is AnyObject { // b, d, e is also AnyObject
    print("\(a.dynamicType) is AnyObject")
}

我不明白的是为什么IntDoubleFloat都是AnyObjects?为什么编译器什么都不说?这些类型被声明为结构。无法将结构MyStruct传递给顶部的方法,因为它不符合AnyObject

你能帮助我理解为什么IntDoubleFloatAnyObject,或者为什么编译器认为它们是AnyObject吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-14 04:59:43

很好的发现!UIKit实际上将它们转换为NSNumber -- @vacawama也提到过。这样做的原因是,有时您正在处理返回或使用AnyObject的代码,然后此对象可以转换(as!)为Int或其他“结构”。

票数 1
EN

Stack Overflow用户

发布于 2020-01-20 19:18:55

代码语言:javascript
复制
class Test {

static func test() {
    let anyObjectsValues: [AnyObject] = [1, "Two", 3, "Four"] as [AnyObject]
    anyObjectsValues.forEach { (value) in
        switch value {
        case is Int:
            print("\(value) is an Int!")
        case is String:
            print("\(value) is a String!")
        default:
            print("\(value) is some other type!")
        }
    }
}

}

我还没有导入UIKit或基础框架。为什么编译器没有给出任何错误?甚至它还会打印结果。

输出:

%1是Int!

二是一个字符串!

3是一个整数!

四是一个字符串!

有谁有主意吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32554357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档