【问题标题】:Convert Objective-C dictionary definition to Swift将 Objective-C 字典定义转换为 Swift
【发布时间】:2019-01-03 16:22:23
【问题描述】:

我正在为应用程序使用 CRToast 类,在文档中,它说将选项声明为:

NSDictionary *options = @{
                          kCRToastTextKey : @"Hello World!",
                          kCRToastTextAlignmentKey : @(NSTextAlignmentCenter),
                          kCRToastBackgroundColorKey : [UIColor redColor],
                          kCRToastAnimationInTypeKey : @(CRToastAnimationTypeGravity),
                          kCRToastAnimationOutTypeKey : @(CRToastAnimationTypeGravity),
                          kCRToastAnimationInDirectionKey : @(CRToastAnimationDirectionLeft),
                          kCRToastAnimationOutDirectionKey : @(CRToastAnimationDirectionRight)
                          };

除了第一个键值对之外,我大部分时间都将代码转换为 swift。我收到一个语法错误,上面写着“Type 'NSString!'不符合协议'Hashable'”。我的快速翻译是:

var options = [kCRToastTextKey :"Hello World!",
            kCRToastTextAlignmentKey : NSTextAlignment.Center,
            kCRToastBackgroundColorKey : UIColor.redColor(),
            kCRToastAnimationInTypeKey : CRToastAnimationType.Gravity,
            kCRToastAnimationOutTypeKey : CRToastAnimationType.Gravity,
            kCRToastAnimationInDirectionKey : CRToastAnimationDirection.Left,
            kCRToastAnimationOutDirectionKey : CRToastAnimationDirection.Right]

更新: 我尝试在选项声明上方添加一行代码来创建一个 NSString

let text:NSString = "Hello World!"

然后用了

var options = [kCRToastTextKey :text,

可散列的消息消失了,现在我得到“'NSString' is not convertible to 'CRToastAnimationDirection'”

【问题讨论】:

  • 如果删除第一个条目会怎样?
  • 那横幅不是没有文字吗?这给了我一个错误,“'NSTextAlignment' 不能转换为 'CRToastAnimatonDirection'”

标签: objective-c swift translate


【解决方案1】:

我认为 kCRToastKeys 不符合可哈希类型,

试试这个:

var options = [kCRToastTextKey as String):"Hello World!",
        kCRToastTextAlignmentKey as String: NSTextAlignment.Center,
        kCRToastBackgroundColorKey as String : UIColor.redColor(),
        kCRToastAnimationInTypeKey as String : CRToastAnimationType.Gravity,
        kCRToastAnimationOutTypeKey as String : CRToastAnimationType.Gravity,
        kCRToastAnimationInDirectionKey as String : CRToastAnimationDirection.Left,
        kCRToastAnimationOutDirectionKey as String : CRToastAnimationDirection.Right]

【讨论】:

  • 只是在每一行都出错,编译器认为每个“key as String”都需要跟一个逗号
【解决方案2】:

你可以像这个答案一样使用 rawValue。

https://stackoverflow.com/a/27034350

应该是这样的。

let options:[NSObject:AnyObject] = [
    kCRToastTextKey: "Hi!",
    kCRToastTextAlignmentKey: NSTextAlignment.Center.rawValue,
    kCRToastBackgroundColorKey: UIColor.blueColor(),
    kCRToastAnimationInTypeKey: CRToastAnimationType.Gravity.rawValue,
    kCRToastAnimationOutTypeKey: CRToastAnimationType.Gravity.rawValue,
    kCRToastAnimationInDirectionKey: CRToastAnimationDirection.Left.rawValue,
    kCRToastAnimationOutDirectionKey: CRToastAnimationDirection.Right.rawValue
]

【讨论】:

    【解决方案3】:

    这是在 github here 上回答的。使用:

    var options: NSDictionary = [
        kCRToastTextKey : "Hello World!",
        kCRToastTextAlignmentKey : NSTextAlignment.Center.rawValue,
        kCRToastBackgroundColorKey : UIColor.redColor(),
        kCRToastAnimationInTypeKey : CRToastAnimationType.Gravity.rawValue,
        kCRToastAnimationOutTypeKey : CRToastAnimationType.Gravity.rawValue,
        kCRToastAnimationInDirectionKey : CRToastAnimationDirection.Left.rawValue,
        kCRToastAnimationOutDirectionKey : CRToastAnimationDirection.Right.rawValue
    ]
    

    我相信同样的海报。答案与ckang的只是略有不同。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 好点坎佩。谢谢你的温柔,我是新人。我编辑了我的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多