【问题标题】:In Swift code as an array accepts the AnyObject, if we give an Interger and a Double it takes as Double value, why?在 Swift 代码中,作为一个数组接受 AnyObject,如果我们给出一个 Integer 和一个 Double 它作为 Double 值,为什么?
【发布时间】:2015-01-26 01:49:51
【问题描述】:

案例1:

Swift 代码接受以下语句作为 AnyObject var 数组 = [1, 1.0, "字符串"]

数组的输出是:[1, 1.0, "String"]

案例2:

但它不接受 AnyObject 的以下代码并将其假定为所有 Doubles 为什么 var any_object = [1, 2.0, 222222222.888888]

any_object 的输出为:[1.0, 2.0, 222222222.0]

为什么功能从 case1 更改为 case2? 任何人都可以澄清我的疑问。

【问题讨论】:

    标签: arrays swift arrayobject


    【解决方案1】:

    第一种情况必须是AnyObject,因为既有数字数据类型又有字符串。第二种情况是使用可以从值推断出的最精确的数字数据类型形式(在本例中为Double)。

    如果您想在第二种情况下使用AnyObject,您可以在定义时指定此类型:

    var any_object: [AnyObject] = [1, 2.0, 222222222.888888]
    

    【讨论】:

    • 如果我没有将数据类型指定为 AnyObject swift 代码,它应该推断出我有不同的数据类型
    • 我不确定你在说什么。如果您没有指定类型,Swift 会根据您在初始化时提供的项目推断数据类型。如果您有一个字符串数组 ["String1", "String2", "String3"],您不希望它推断类型为 Array 吗? Swift 是一种强类型语言,应该鼓励你尽可能使用正确的类型,这就是类型推断的作用。如果您仅使用整数对其进行初始化,那么 Swift 假设您将在数组中存储一个字符串是没有意义的。这也有助于内存分配。
    • 如果您仍然对此感到困惑,听起来您需要阅读有关类型推断的更多信息:en.wikipedia.org/wiki/Type_inference
    • 对不起,我不清楚我给出的评论,如果我有一个由 Int 和 Double 值组成的数组(即 var array = [2, 345]),swift 假设它为 Double值数组,为什么会这样?
    • 2 和 345 的值本身并没有特定的类型。如果您创建一个 Double 变量并尝试将其设置为 2,则您可以看到这一点,如果 2 只是一个 Int,这将不起作用。同样,如果每次需要 Double 时都必须指定完整的 Double,仅键入 345 是不够的,您需要更多的有效数字。
    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多