在Swift中将元组作为AnyObject传递

18

是否可以将元组作为参数传递给接受任意对象作为参数的函数?

我正在使用允许您传递声明为 AnyObject 的 userState 参数的 OneDrive SDK。该函数声明如下:

func getWithPath(path:String, userState: AnyObject)

我想通过传递一个元组来调用这个方法,因为我想传递具有不同类型的多个值,像这样:

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

是否可以将元组作为参数传递到期望AnyObject的位置?


https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html - iPatel
2个回答

14

元组不是对象,所以这样操作是行不通的。但是,如果将 AnyObject 更改为 Any,则可以传递对象以及元组:

func getWithPath(path:String, userState: Any)

11

从Swift 文档中:

只要一个类或协议标记有@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中使用。
因此,您不能将元组用于AnyObject,因为没有匹配的objective c对象可用于元组。相反,使用Dictionary作为参数传递。
请改用Dictionary。
var abc:[String:AnyObject] = ["abc":123,"pqr":"not"],您可以使用AnyObject来表示它。
请将此用于您的字典。
let userState:[String:AnyObject] = ["name": "temp", "callingDate": NSDate(), "randomValue": 2345]

由于sdk是用Objective C编写的,因此您无法使用tuple。您可以将“Dictionary”作为参数发送,并将键设置为类似state的NSString值或NSNumber值。当你要使用值时,可以检查字典值的class并执行适当的操作。 - codester
“tuple”与“Dictionary”相同,您可以在顶层使用字典可以做的所有事情都可以使用“tuple”完成。 - codester
好的,我正在尝试做这件事... 让用户状态 = ["name": "temp", "callingDate": Date(), "randomValue": 2345)],但是Swift不允许我这样做,因为值类型不同,即String、Date、Int。我该如何解决这个问题? - Salman Hasrat Khan
请使用NSDate而不是Date - codester
在字典中使用 Int 完全没有问题,Swift 的 Dictionary 会自动转换为 objective c 中的 NSDictionary,所有的 IntBool 也会自动转换为 NSNumber。您不需要做任何事情。使用我的解决方案并将字典作为参数传递给答案。 - codester
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接