【问题标题】:What is return type " () "?什么是返回类型“()”?
【发布时间】:2016-09-29 16:44:28
【问题描述】:

我有一个函数,它接受其他几个函数作为参数:

class Iterator {
    func iterateItems(itemArray: [Items], removeItem: (Items) -> Void, addItem: (inout Items) -> Void, calculateEfficiency: () -> Void) -> [Items] {
        // function body
    }
}

我在它的类的子类中这样称呼它:

class WPCalculator: Iterator {

    func removeWeaponItem(item: WeaponItems) { ... }
    func addWeaponItem(item: inout WeaponItems) { ... }
    func calcWeaponDamage() { ... }

    func iterateWPItems() {
        return iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem as! (Items) -> Void, addItem: addWeaponItem as! (inout Items) -> Void, calculateEfficiency: calcWeaponDemage)
   }
}

WeaponItems 类也是Items 类的子类:

class WeaponItems: Items { ... }

Xcode 在addWeaponItem 上给我一个警告:

从(inout WeaponItems) -> () 转换为不相关类型(inout Items) -> Void 总是失败


我无法理解 -> () 返回类型,显然它不是我的函数所做的,其他作为参数传递的函数没有 inout 参数就可以正常工作

【问题讨论】:

标签: ios swift


【解决方案1】:

您的函数iterateItems 具有removeItem addItem calculateEfficiency 参数是函数类型。所以调用函数时必须使用函数名作为参数。

像这样:

iterateItems(itemArray: WeaponItems.weaponItems, removeItem: removeWeaponItem, addItem: addWeaponItem, calculateEfficiency: calcWeaponDamage)

【讨论】:

  • 我想这就是我所做的,Xcode 让我输入 cast,奇怪的是在 addWeaponItem 上失败了
  • @BrightFuture 我认为 Swift 不允许输入强制转换参数,因为您可以在函数中更改这种类型的参数。最好写一个新的 addWeaponItem(item: inout Items) 函数
【解决方案2】:

我认为() 与Void 相同

出现警告是因为 WeaponItems 和 Items 不匹配

http://ericasadun.com/2015/05/11/swift-vs-void/

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2015-12-08
    • 2018-01-17
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多