【问题标题】:For collection types, why remove method returns a value while insert does't对于集合类型,为什么 remove 方法返回一个值,而 insert 没有
【发布时间】:2016-09-06 01:35:10
【问题描述】:

感谢您花时间和精力帮助我解决这个问题

我注意到,对于集合类型(数组、集合和字典),remove 方法总是返回一个值,而 insert 方法没有,为什么会这样,为什么它们都不返回一个值。这背后的设计逻辑是什么?我想知道。

var letterSet = Set<String>()
print(letterSet.insert("a")) // -> ()
print(letterSet.remove("a")) // -> Optional("a")

var intArray = [Int]()
print(intArray.insert(5, atIndex: 0)) // -> ()
print(intArray.removeAtIndex(0)) // -> 5

var colorDic = [String : String]()
print(colorDic.updateValue("Blue", forKey: "FirstColor")) // -> nil
print(colorDic.removeValueForKey("FirstColor"))// -> Optional("Blue")

顺便说一句:为什么 Dictionary 的 updateValue 方法返回 nil 而不是 void

非常感谢

【问题讨论】:

    标签: arrays swift dictionary collections set


    【解决方案1】:

    我认为原因是当您从数组或字典中删除一个元素时,您可能希望将删除的元素用于某些内容,因此让函数返回该元素允许您在需要时将其存储在变量中。

    但是插入一个元素需要你已经拥有那个元素,所以函数不需要返回它。

    至于字典的 updateValue 函数,docs 揭示了为什么它在这种情况下为 nil 的更多信息。如果您要更新已具有值的键的值,则该函数将返回被替换的值(以防您需要它)。当没有先前的值时,该函数返回 nil,因为您已经拥有更新它的元素,因此该函数无需将其返回给您。

    【讨论】:

    • 非常感谢您的解释。我现在有了更好的理解
    【解决方案2】:

    它们旨在提高代码的可读性。如果一行代码只有一个动作,对眼睛来说会好很多。

    在其他编程语言(例如 C++)中,通常将调用链接到一个对象,然后在一行代码中插入、删除和排序数组,这将导致非常糟糕的可读性和对对象的理解代码。

    【讨论】:

    • 非常感谢您的帮助和解释")
    猜你喜欢
    • 2011-02-14
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多