Swift에서 Objective-C #define을 사용하는 방법
UIViewController
Swift로 조금 훈련하기 위해 수업을 마이그레이션하고 있습니다. 브리징 헤더를 통해 Objective-C 코드를 성공적으로 사용하고 있지만 #define
지시문 이 포함 된 상수 파일을 가져와야합니다 .
Cocoa 및 Objective-C (단순 매크로) 와 함께 Swift 사용 에서 다음을 보았습니다 .
간단한 매크로
일반적으로
#define
지시어를 사용하여 C 및 Objective-C에서 기본 상수를 정의한 경우 Swift에서는 대신 전역 상수를 사용합니다. 예를 들어 상수 정의#define FADE_ANIMATION_DURATION 0.35
는let FADE_ANIMATION_DURATION = 0.35
. 단순한 상수와 유사한 매크로는 Swift 전역 변수에 직접 매핑되기 때문에 컴파일러는 C 및 Objective-C 소스 파일에 정의 된 간단한 매크로를 자동으로 가져옵니다.
그래서 가능한 것 같습니다. 상수가 포함 된 파일을 브리징 헤더로 가져 왔지만 .swift
파일 에서 가시성이 없어 해결할 수 없습니다.
내 상수를 Swift에 표시하려면 어떻게해야합니까?
최신 정보:
NSString
상수로 작동하는 것처럼 보이지만 부울로 는 작동 하지 않습니다.
#define kSTRING_CONSTANT @"a_string_constant" // resolved from swift
#define kBOOL_CONSTANT YES // unresolved from swift
현재 일부 #define
는 변환되고 일부는 변환되지 않습니다. 더 구체적으로:
#define A 1
...된다 :
var A: CInt { get }
또는:
#define B @"b"
...된다 :
var B: String { get }
불행하게도, YES
그리고 NO
인식과 스위프트 컴파일러에 의해 즉석에서 변환되지 않습니다.
#define
s를 실제 상수 로 변환 하는 것이 좋습니다 #define
. 어쨌든 s 보다 낫 습니다.
.h :
extern NSString* const kSTRING_CONSTANT;
extern const BOOL kBOOL_CONSTANT;
.미디엄
NSString* const kSTRING_CONSTANT = @"a_string_constant";
const BOOL kBOOL_CONSTANT = YES;
그리고 Swift는 다음을 볼 것입니다 :
var kSTRING_CONSTANT: NSString!
var kBOOL_CONSTANT: ObjCBool
또 다른 옵션은 BOOL
정의를 다음과 같이 변경 하는 것입니다.
#define kBOOL_CONSTANT 1
더 빠르게. 그러나 실제 상수만큼 좋지는 않습니다.
위에서 몇 가지 사항에 대한 간단한 설명입니다.
Swift Constant는 키워드를 사용하여 표현됩니다.let
예를 들면 :
let kStringConstant:String = "a_string_constant"
또한 프로토콜 정의에서만 {get}을 사용할 수 있습니다. 예 :
protocol MyExampleProtocol {
var B:String { get }
}
신속하게 모든 클래스 또는 함수 외부에서 열거 형, 변수 또는 함수를 선언 할 수 있으며 특정 파일을 가져올 필요없이 모든 클래스에서 (전역 적으로) 사용할 수 있습니다.
import Foundation
import MapKit
let kStringConstant:String = "monitoredRegions"
class UserLocationData : NSObject {
class func getAllMonitoredRegions()->[String]{
defaults.dictionaryForKey(kStringConstant)
}
간단한 신속한 언어는 모든 #define 지시문 매크로가 필요하지 않습니다. let이되고 복잡한 매크로는 func로 변환되어야합니다.
매크로의 대안은 전역 변수 일 수 있습니다. 클래스 외부에서 전역 변수를 선언하고 클래스를 사용하지 않고도 액세스 할 수 있습니다. 아래에서 예를 찾으십시오.
import Foundation
let BASE_URL = "www.google.com"
class test {
}
참고 URL : https://stackoverflow.com/questions/24325477/how-to-use-a-objective-c-define-from-swift
'programing tip' 카테고리의 다른 글
has_secure_password는 어떤 형태의 솔팅을 사용합니까? (0) | 2020.11.12 |
---|---|
“MapHttpRoute”와“MapRoute”의 차이점은 무엇입니까? (0) | 2020.11.12 |
제어 구성 요소와 제어되지 않는 구성 요소는 무엇입니까? (0) | 2020.11.12 |
GCC를 "cc"대 "gcc"로 호출 (0) | 2020.11.12 |
CSS 축소 여백의 요점은 무엇입니까? (0) | 2020.11.12 |