Передать кортежи как AnyObject в swift

Можно ли передавать Tuples в качестве параметров для функций, которые принимают AnyObject в качестве параметра?

Я использую SDK OneDrive, который позволяет вам передать параметр UserState, который объявлен как AnyObject. Функция объявляется следующим образом:

func getWithPath(path:String, userState: AnyObject)

Я хотел бы назвать этот метод, проходящий в Tuple, так как я хочу передать несколько значений с разными типами:

getWithPath("me/skydrive", (name: "temp", callingDate: Date(), randomValue: 2345))

Можно ли передать Tuple в качестве параметра, где ожидается AnyObject?

Ответы

Ответ 1

Кортежи не являются объектами, поэтому это не сработает. Однако, если вы измените AnyObject на Any, вы можете передать объекты, а также кортежи:

func getWithPath(path:String, userState: Any)

Ответ 2

Из быстрого docs

У вас есть доступ к чему-либо в классе или протоколе, который отмеченный атрибутом @objc, если он совместим с Objective-C. Это исключает функции Swift, такие как перечисленные Вот: 7     Дженерики

Tuples

Enumerations defined in Swift

Structures defined in Swift

Top-level functions defined in Swift

Global variables defined in Swift

Typealiases defined in Swift

Swift-style variadics

Nested types

Curried functions

Например, метод, который принимает общий тип как аргумент или возвращает кортеж не будет использоваться из Objective-C.

Таким образом, вы не можете использовать tuple для AnyObject, поскольку для tuple не сопоставляется объект objective c. Вместо этого используйте Dictionary для передачи в качестве параметра

Вместо этого используйте словарь

var abc:[String:AnyObject] = ["abc":123,"pqr":"not"] вы можете использовать AnyObject for thar

Используйте это для своего словаря

let userState:[String:AnyObject] = ["name": "temp", "callingDate": NSDate(), "randomValue": 2345]