Objective-C에서 Swift 구조체를 사용하는 방법
단순히 다음과 같은 응용 프로그램 상수를 저장하는 구조를 가지고 있습니다.
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
이 상수는 스위프트 코드에서 사용할 수 있습니다.Constant.ParseClientKey
예를들면.하지만 제 코드에는 일부 Objective-C 클래스도 포함되어 있습니다.그래서 제 질문은 목표-C 코드에서 이 상수들을 어떻게 사용할 것인가 하는 것입니다.
상수를 선언하는 이 방법이 좋지 않은 경우 스위프트 코드와 목표-C 코드 모두에 사용할 전역 상수를 만드는 가장 좋은 방법은 무엇입니까?
슬프게도, 당신은 노출할 수 없습니다.struct
목표-C에 대한 글로벌 변수도 아닙니다. 부분적으로 다음과 같이 명시된 설명서를 참조하십시오.
Objective-C 상호 운용성이 필요할 때 클래스 사용
데이터를 처리해야 하는 Objective-C API를 사용하거나 Objective-C 프레임워크에 정의된 기존 클래스 계층 구조에 데이터 모델을 맞춰야 하는 경우 클래스 및 클래스 상속을 사용하여 데이터를 모델링해야 할 수 있습니다.예를 들어, 많은 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 }
}
목표-C 파일에서 사용하려면 상수를 사용해야 할 때 다음을 추가합니다.
#import "ProjectModuleName-Swift.h"
신속한 사용:
self.view.backgroundColor = Constant.kAppGreenColor
목표-C 사용:
self.view.backgroundColor = [Constants appGreenColor];
이렇게 하면 전체 앱의 색상, 기본 텍스트, 웹 서비스 URL을 한 곳에서 업데이트할 수 있습니다.
이 작업이 늦거나 중복될 수 있지만 다음 코드로 작업할 수 있습니다.
@objcMembers class Flags: NSObject {
static let abcEnabled = false
static let pqrEnabled = false
.
.
.
}
분명히 객체 코드에서 사용하려면 #import "ProjectModuleName-Swift"를 수행해야 합니다.h"
클래스를 통해서만 이러한 상수에 액세스할 수 있도록 코드의 다른 Swift 유형을 설정하려면 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
언급URL : https://stackoverflow.com/questions/26173234/how-to-use-swift-struct-in-objective-c
'programing' 카테고리의 다른 글
jQuery.each()의 각 반복 사이에 일시 중지를 추가하는 방법은 무엇입니까? (0) | 2023.08.30 |
---|---|
도커에서 실행 중/중지된 컨테이너의 전체 명령 보기 (0) | 2023.08.30 |
key_load_public: 잘못된 형식 (0) | 2023.08.30 |
MySQL에서 INT(1)와 TINYINT(1)를 사용하는 것에 차이가 있습니까? (0) | 2023.08.30 |
요소(기본 키)가 데이터베이스의 다른 위치에 포함되어 있는지 확인합니다. (0) | 2023.08.30 |