【问题标题】:Pass Tuples as AnyObject in swift将元组作为 AnyObject 快速传递
【发布时间】:2014-07-26 11:51:09
【问题描述】:

是否可以将元组作为参数传递给以 AnyObject 作为参数的函数?

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

func getWithPath(path:String, userState: AnyObject)

我想调用这个方法传入一个元组,因为我想传递多个不同类型的值,如下所示:

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

是否可以将元组作为参数传递给期望 AnyObject 的地方?

【问题讨论】:

标签: ios swift tuples onedrive


【解决方案1】:

元组不是对象,所以这不起作用。但是,如果将AnyObject 更改为Any,则可以传递对象以及元组:

func getWithPath(path:String, userState: Any)

【讨论】:

    【解决方案2】:

    来自斯威夫特docs

    您可以访问类或协议中的任何内容 标有@objc 属性,只要它兼容 目标-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,因为元组没有匹配的objective c 对象。而是使用Dictionary 作为参数传递

    改用字典

    var abc:[String:AnyObject] = ["abc":123,"pqr":"not"]你可以使用AnyObject for thar

    用这个作为你的字典

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

    【讨论】:

    • 问题是我的字典没有一致的值类型。我有一个字符串、一个布尔值、一个整数等等作为值类型。我该如何克服这个障碍?
    • 由于sdk是用Objective C写的,所以你不能使用tuple。你可以发送Dictionary作为参数,并像state这样的键,并用NSString值或NSNumber值设置这个键.当您开始使用值时,您可以检查classdictionary 值并采取适当的措施。
    • tupleDictionary 相同,您可以使用字典完成所有操作,您可以在顶层使用 tuple 进行操作
    • 好的,所以我正在尝试这样做...让 userState = ["name": "temp", "callingDate": Date(), "randomValue": 2345)] 但 swift 赢了'不允许我这样做,因为值类型不同,即 String、Date、Int。我该如何解决这个问题?
    • 使用NSDate 而不是Date
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多