Возврат любого типа объекта в функции в Swift

#swift #swift-playground #swiftype

#swift #swift-игровая площадка #swiftype

Вопрос:

Я хочу вернуть функцию или значение, которое может быть Int или String или другим другим типом в Swift из функции. Какой тип может представлять все это?

Следующий код выдает ошибку из-за этой строки в функции автоматического размытия return self.autoCurry(function, params, numArgs: argsRemaining)

 class $ {


    class func curry<P, T>(function: (P...) -> T, _ parameters: (P[])) -> ((P...) -> Any?) {
        return {
            (curryParams: P...) -> Any? in
            var params:P[] = []
            return function(reinterpretCast(parameters   curryParams))
        }
    }

    class func autoCurry<P, T>(function: (P...) -> T, _ parameters: (P[]), numArgs: Int) -> ((P...) -> Any?) {
        let funcParams: P[] = []
        let funcRef = { (curryParams: P...) -> Any? in
            if curryParams.count < numArgs {
                let argsRemaining = numArgs - curryParams.count
                let params = parameters   curryParams
                return self.autoCurry(function, params, numArgs: argsRemaining)
            } else {
                return function(reinterpretCast(curryParams))
            }
        }
        return funcRef
    }
}
 

Ответ №1:

Не существует типа Swift, который охватывает функции. Два «общих» типа явно исключают функции.

Swift provides two special type aliases for working with non-specific types:

  AnyObject can represent an instance of any class type.
  Any can represent an instance of any type at all, apart from function types.”


Excerpt From: Apple Inc. “The Swift Programming Language.”
  iBooks. https://itun.es/us/jEUH0.l
 

таким образом, вы не можете указать возвращаемый тип, который может охватывать как функции, так и любой другой тип.

Боковое примечание: похоже, что вы на самом деле не выполняете операцию «Карри», а скорее «приложение с частичной функцией». Каррирование встроено в Swift.

Комментарии:

1. Если это отвечает на ваш вопрос, пожалуйста, подумайте о «галочке».