【问题标题】:Updating Objective-C syntax with Swift equivalent for unused static使用 Swift 等效更新 Objective-C 语法以处理未使用的静态
【发布时间】:2017-04-09 01:52:17
【问题描述】:

我被困在从以下位翻译方法。

在原来的Objective-C中,方法是:

+ (CGFloat)defaultFontSize
{
    CGFloat pointSize = 16.0;
    NSString *contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
    pointSize += SLKPointSizeDifferenceForCategory(contentSizeCategory); //stucj here

    return pointSize;
}

到目前为止,我在 Swift 中做了以下工作:

let defaultFontSize: Float {
        get {
            let pointSize = 16.0
            let contentSizeCategory = UIApplication.shared.preferredContentSizeCategory
            //What do here for SLKPointSizeDifferenceForCategory?
     }
}

特别是我不知道怎么翻译SLKPointSizeDifferenceForCategory,这是一个unused static CGFloat

__unused static CGFloat SLKPointSizeDifferenceForCategory(NSString *category)
{
    if ([category isEqualToString:UIContentSizeCategoryExtraSmall])                         return -3.0;
    if ([category isEqualToString:UIContentSizeCategorySmall])                              return -2.0;
    if ([category isEqualToString:UIContentSizeCategoryMedium])                             return -1.0;
    if ([category isEqualToString:UIContentSizeCategoryLarge])                              return 0.0;
    if ([category isEqualToString:UIContentSizeCategoryExtraLarge])                         return 2.0;
    if ([category isEqualToString:UIContentSizeCategoryExtraExtraLarge])                    return 4.0;
    if ([category isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge])               return 6.0;
    if ([category isEqualToString:UIContentSizeCategoryAccessibilityMedium])                return 8.0;
    if ([category isEqualToString:UIContentSizeCategoryAccessibilityLarge])                 return 10.0;
    if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge])            return 11.0;
    if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge])       return 12.0;
    if ([category isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge])  return 13.0;
    return 0;
}

非常感谢任何指导。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    这只是一个返回CGFloat的函数:

    func SLKPointSizeDifference(for category: UIContentSizeCategory) -> CGFloat {
        typealias c = UIContentSizeCategory // for the sake of reducing boilerplate below
    
        switch category {
        case c.extraSmall:                         return -3
        case c.small:                              return -2
        case c.medium:                             return -1
        case c.large:                              return 0
        case c.extraLarge:                         return 2
        case c.extraExtraLarge:                    return 4
        case c.extraExtraExtraLarge:               return 6
        case c.accessibilityMedium:                return 8
        case c.accessibilityLarge:                 return 10
        case c.accessibilityExtraLarge:            return 11
        case c.accessibilityExtraExtraLarge:       return 12
        case c.accessibilityExtraExtraExtraLarge:  return 13
        default:                                   return 0
        }
    }
    
    • __unused 只是一个标志,告诉编译器如果该函数从未使用过,则不要发出警告。查看更多here

    • static 只是将该函数的存在范围限制为当前文件。

    • UIContentSizeCategory 作为结构体导入 Swift,比仅使用原始字符串具有更强的类型化。

    【讨论】:

      【解决方案2】:

      __unused only tells the compiler "don't warn me if I don't use this variable".,在这种情况下,我认为这意味着如果SLKPointSizeDifferenceForCategory 的结果未使用,则不应显示任何警告。

      As for the Slack SDK function you're trying to port,为什么不简单地将 SlackTextViewController 包含在您的桥接头中,然后您可以像魔术一样使用原始功能。

      【讨论】:

      猜你喜欢
      • 2014-08-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2015-10-05
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多