首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Objective-C中使用Swift结构

如何在Objective-C中使用Swift结构
EN

Stack Overflow用户
提问于 2014-10-03 12:18:48
回答 3查看 60K关注 0票数 109

简单地说,我有一个存储应用程序常量的结构,如下所示:

struct Constant {

    static let ParseApplicationId = "xxx"
    static let ParseClientKey = "xxx"

    static var AppGreenColor: UIColor {
        return UIColor(hexString: "67B632")
    }
}

例如,可以通过调用Constant.ParseClientKey在Swift代码中使用这些常量。但在我的代码中,它也包含一些Objective-C类。所以我的问题是如何在Objective-C代码中使用这些常量?

如果这种声明常量的方式不好,那么创建在Swift和Objective-C代码中使用的全局常量的最佳方式是什么?

EN

回答 3

Stack Overflow用户

发布于 2016-01-28 07:04:59

为什么不创建一个同时包含struct@objc class的文件,如下所示:

import UIKit

extension UIColor {
    convenience init(hex: Int) {
        let components = (
            R: CGFloat((hex >> 16) & 0xff) / 255,
            G: CGFloat((hex >> 08) & 0xff) / 255,
            B: CGFloat((hex >> 00) & 0xff) / 255
        )
        self.init(red: components.R, green: components.G, blue: components.B, alpha: 1)
    }
}

extension CGColor {
    class func colorWithHex(hex: Int) -> CGColorRef {
        return UIColor(hex: hex).CGColor
    }
}

struct Constant {
    static let kParseApplicationId = "5678"
    static let kParseClientKey = "1234"
    static var kAppGreenColor: UIColor { return UIColor(hex:0x67B632) }
    static var kTextBlackColor: UIColor { return UIColor(hex:0x000000) }
    static var kSomeBgBlueColor: UIColor { return UIColor(hex:0x0000FF) }
    static var kLineGrayCGColor: CGColor { return CGColor.colorWithHex(0xCCCCCC) }
    static var kLineRedCGColor: CGColor { return CGColor.colorWithHex(0xFF0000) }
}


@objc class Constants: NSObject {
    private override init() {}

    class func parseApplicationId() -> String { return Constant.kParseApplicationId }
    class func parseClientKey() -> String { return Constant.kParseClientKey }
    class func appGreenColor() -> UIColor { return Constant.kAppGreenColor }
    class func textBlackColor() -> UIColor { return Constant.kTextBlackColor }
    class func someBgBlueColor() -> UIColor { return Constant.kSomeBgBlueColor }
    class func lineGrayCGColor() -> CGColor { return Constant.kLineGrayCGColor }
    class func lineRedCGColor() -> CGColor { return Constant.kLineRedCGColor }
}

要在Objective-C文件中使用,请在需要使用常量时添加以下内容:

#import "ProjectModuleName-Swift.h"

Swift用法:

self.view.backgroundColor = Constant.kAppGreenColor

Objective-C的用法:

self.view.backgroundColor = [Constants appGreenColor];

这样你就可以在一个地方更新整个应用程序的颜色、默认文本和web服务urls。

票数 24
EN

Stack Overflow用户

发布于 2020-01-15 16:52:38

虽然这可能会延迟或多余,但我可以使用以下代码使其工作:

@objcMembers class Flags: NSObject {
    static let abcEnabled = false
    static let pqrEnabled = false
    .
    .
    .
}

显然,要在objc c代码中使用,必须执行#import "ProjectModuleName-Swift.h“

票数 3
EN

Stack Overflow用户

发布于 2016-07-19 00:21:42

如果您想让代码中的其他Swift类型仅通过class访问这些常量,则应将let语句设为私有:

private let AppGreenColor = UIColor(red: 0.2, green: 0.7, blue: 0.3 alpha: 1.0)

@objc class Constant {
    class func appGreenColor() -> UIColor { return AppGreenColor }
}

在Swift中,您可以这样使用它们:

UIColor *greenColor = Constant.appGreenColor

由于let语句是私有的,下面这行代码现在将不再编译:

UIColor *greenColor = appGreenColor
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26173234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档