atx*_*txe 67 macros objective-c swift
我正在迁移一个UIViewController
类,用Swift训练一下.我通过桥接头成功使用Objective-C代码,但我需要导入包含#define
指令的常量文件.
我在使用Swift与Cocoa和Objective-C(简单宏)中看到了以下内容:
简单的宏
在通常使用该
#define
指令在C和Objective-C中定义基本常量的地方,在Swift中使用全局常量代替.例如,常量定义#define FADE_ANIMATION_DURATION 0.35
可以在Swift中更好地表达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
Run Code Online (Sandbox Code Playgroud)
fab*_*ier 57
目前,有些#define
是转换的,有些则不是.进一步来说:
#define A 1
Run Code Online (Sandbox Code Playgroud)
...变为:
var A: CInt { get }
Run Code Online (Sandbox Code Playgroud)
要么:
#define B @"b"
Run Code Online (Sandbox Code Playgroud)
...变为:
var B: String { get }
Run Code Online (Sandbox Code Playgroud)
遗憾的是,YES
并NO
没有认可和斯威夫特编译器转换的飞行.
我建议你将#define
s 转换为实际常数,这比#define
s 更好.
.H:
extern NSString* const kSTRING_CONSTANT;
extern const BOOL kBOOL_CONSTANT;
Run Code Online (Sandbox Code Playgroud)
.M
NSString* const kSTRING_CONSTANT = @"a_string_constant";
const BOOL kBOOL_CONSTANT = YES;
Run Code Online (Sandbox Code Playgroud)
然后斯威夫特会看到:
var kSTRING_CONSTANT: NSString!
var kBOOL_CONSTANT: ObjCBool
Run Code Online (Sandbox Code Playgroud)
另一个选择是将您的BOOL
定义更改为
#define kBOOL_CONSTANT 1
Run Code Online (Sandbox Code Playgroud)
快点.但不如实际常数好.
小智 22
只需快速澄清上面的一些事情.
Swift常量使用关键字表示let
例如:
let kStringConstant:String = "a_string_constant"
Run Code Online (Sandbox Code Playgroud)
此外,只有在协议定义中才能使用{get},例如:
protocol MyExampleProtocol {
var B:String { get }
}
Run Code Online (Sandbox Code Playgroud)
在swift中,您可以在任何类或函数之外声明枚举,变量或函数,它将在所有类中(全局)可用(无需导入特定文件).
import Foundation
import MapKit
let kStringConstant:String = "monitoredRegions"
class UserLocationData : NSObject {
class func getAllMonitoredRegions()->[String]{
defaults.dictionaryForKey(kStringConstant)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
85114 次 |
最近记录: |