我有这段代码
#if TARGET_OS_SIMULATOR
let device = false
let RealmDB = try! Realm(path: "/Users/Admin/Desktop/realm/Realm.realm")
#else
let device = true
let RealmDB = try! Realm()
#endif
设备bool工作正常,但RealmDB仅适用于其他条件。
答案 0 :(得分:24)
从Xcode 9.3+开始,Swift现在支持if #targetEnvironment(simulator)
来检查你是否正在为模拟器构建。
请停止使用架构作为模拟器的快捷方式。 macOS和模拟器都是x86_64,可能不是你想要的。
// ObjC/C:
#if TARGET_OS_SIMULATOR
// for sim only
#else
// for device
#endif
// Swift:
#if targetEnvironment(simulator)
// for sim only
#else
// for device
#endif
答案 1 :(得分:11)
TARGET_IPHONE_SIMULATOR
宏在Swift中不起作用。
你想做的就像下面这样,对吧?
#if arch(i386) || arch(x86_64)
let device = false
let RealmDB = try! Realm(path: "/Users/Admin/Desktop/realm/Realm.realm")
#else
let device = true
let RealmDB = try! Realm()
#endif
答案 2 :(得分:6)
请看这篇文章。这是正确的方法,并且很好地解释了
https://samsymons.com/blog/detecting-simulator-builds-in-swift/
基本上定义一个名为你喜欢的变量(可能是' SIMULATOR'),在模拟器中运行时设置。
在目标的构建设置中,在Active Compilation Conditions
- >下设置它Debug
然后(+)
然后在下拉列表中选择Any iOS Simulator SDK
,然后添加变量。
然后在你的代码中
var isSimulated = false
#if SIMULATOR
isSimulated = true // or your code
#endif
答案 3 :(得分:0)
struct Platform {
static let isSimulator: Bool = {
var isSim = false
#if arch(i386) || arch(x86_64)
isSim = true
#endif
return isSim
}()
}
// Elsewhere...
if Platform.isSimulator {
// Do one thing
}
else {
// Do the other
}
或者创建一个实用程序类:
class SimulatorUtility
{
class var isRunningSimulator: Bool
{
get
{
return TARGET_OS_SIMULATOR != 0// for Xcode 7
}
}
}