Это довольно умно, но вы сталкиваетесь с несколькими проблемами с тонким типом. И, как обычно, самыми крупными виновниками являются Any
и AnyObject
. Вы должны стараться избегать их, когда это возможно.
Ваша первая проблема заключается в следующем:
[
"func": SomeUtils.process,
"someValue": 1
]
Это определяет [String: Any]
, которые не могут быть преобразованы в AnyObject
. Вы не можете переместить Any
(например, Float -> Float
) в NSDictionary
. Вам нужен AnyObject
.
Вторая проблема заключается в том, что использование вами contextFunc
не соответствует данным, которые вы передаете. context
не Float->Float
. Это [String:Any]
. Это может быть ошибкой в том, как вы задали вопрос.
Итак, как это исправить? Вам нужен AnyObject
. Что самое простое AnyObject
? Цель курса:
class Context {
let f: Float -> Float
let value: Int
init(f: Float -> Float, value: Int) {
self.f = f
self.value = value
}
}
Теперь вы можете просто передать один из них:
self.pushControllerWithName("someController",
context: Context(f: SomeUtils.process, value: 1))
И вы можете разгружать это так:
if let context = context as? Context {
let contextFunc = context.f
let result = contextFunc(123)
}
ошибка происходит от линии pushContollerWithName ? –
Да, с линией с клавишей «func». – TruMan1
Не могли бы вы разместить подпись метода pushControllerWithName()? – Abdullah