2016-09-29 15 views
0

У меня есть функция, которая принимает несколько другие функции в качестве аргументов:Что такое тип возврата «()»?

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:

Cast от (inout WeaponItems) ->() к несвязанному типу (inout Items) -> Void всегда терпит неудачу


Я не могу понять типа ->() возврата, явно его не то, что делает моя функция, другие функции, передаваемые в качестве аргументов без INOUT параметры просто прекрасно работали

+6

'()' так же, как 'Void'. Должно быть в книге Swift, найдите «пустой кортеж». –

+1

Связано: [Возврат в функции без возвращаемого значения в Swift] (http://stackoverflow.com/questions/38946275/) и [Есть ли возможные явные использования экземпляров (значений) пустых кортежей(), т. Е. Экземпляров типа «Пустота»?] (http://stackoverflow.com/questions/34561452/). – dfri

ответ

0

Ваша функция iterateItems имеет removeItemaddItemcalculateEfficiency параметр тип функции. Поэтому вы должны использовать имя функции в качестве параметров при вызове функции.

как это:

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

Я думаю, что это то, что я сделал, и Xcode попросил меня набрать «cast», что странно провалилось «addWeaponItem» –

+0

@BrightFuture. Я думаю, что Swift не позволит вводить параметры ввода in-out, потому что вы можете изменить этот тип параметра внутри своего функция. Лучше написать новую функцию addWeaponItem (item: inout Items) – larva

Смежные вопросы