Objective-C에서 Swift 구조체를 사용하는 방법
간단히 아래와 같이 응용 프로그램 상수를 저장하는 구조체가 있습니다.
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 코드에서 사용할 전역 상수를 만드는 가장 좋은 방법은 무엇입니까?
안타깝게도 struct
Objective-C에, 전역 변수를 노출 할 수 없습니다 . 설명서를 참조하십시오 .
현재 IMHO, 가장 좋은 방법은 다음과 같습니다.
let ParseApplicationId = "xxx"
let ParseClientKey = "xxx"
let AppGreenColor = UIColor(red: 0.2, green: 0.7, blue: 0.3 alpha: 1.0)
@objc class Constant: NSObject {
private init() {}
class func parseApplicationId() -> String { return ParseApplicationId }
class func parseClientKey() -> String { return ParseClientKey }
class func appGreenColor() -> UIColor { return AppGreenColor }
}
Objective-C에서는 다음과 같이 사용할 수 있습니다.
NSString *appklicationId = [Constant parseApplicationId];
NSString *clientKey = [Constant parseClientKey];
UIColor *greenColor = [Constant appGreenColor];
왜 모두의 파일 만들 수 없습니다 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 }
}
For use in Objective-C files add this when you need to use constants:
#import "ProjectModuleName-Swift.h"
Swift usage:
self.view.backgroundColor = Constant.kAppGreenColor
Objective-C usage:
self.view.backgroundColor = [Constants appGreenColor];
This way you can update colors, default text, web service urls for whole app in one place.
You should make the let statements private if you want to make other Swift types in your code to access these constants only via class:
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 }
}
In Swift, you can use them like this:
UIColor *greenColor = Constant.appGreenColor
The following line will not compile anymore now since the let statement is private:
UIColor *greenColor = appGreenColor
참고URL : https://stackoverflow.com/questions/26173234/how-to-use-swift-struct-in-objective-c
'development' 카테고리의 다른 글
Vim 맞춤법 검사에서 하이라이트 스타일을 어떻게 변경합니까? (0) | 2020.09.25 |
---|---|
cc1plus : 오류 : g ++에서 인식 할 수없는 명령 줄 옵션“-std = c ++ 11” (0) | 2020.09.25 |
네트워크 패널의 Google 크롬 타임 라인에서 시간은 무엇을 의미합니까? (0) | 2020.09.25 |
ByteBuffer의 flip 메소드의 목적은 무엇입니까? (0) | 2020.09.25 |
jQuery로 div의 가시 높이 가져 오기 (0) | 2020.09.25 |