Ios 在Watch app使用的文件中有条件地使用UIKit
我已经创建了一个模型类,我在iOS应用程序和手表应用程序中使用它-它包含在两个目标中。现在我必须在这个类中使用Ios 在Watch app使用的文件中有条件地使用UIKit,ios,swift,watchkit,swift2,watchos-2,Ios,Swift,Watchkit,Swift2,Watchos 2,我已经创建了一个模型类,我在iOS应用程序和手表应用程序中使用它-它包含在两个目标中。现在我必须在这个类中使用UIPasteboard,它只在UIKit中可用,而watchOS不可用。虽然我可以毫无问题地将UIKit导入此文件,但当我使用UIPasteboard时,它将不会编译,因为watch扩展插件不知道它 如何在我的手表应用程序可用的类中使用UIPasteboard 我想知道我是否只能在设备不是Apple Watch时使用#available运行该代码,但这并没有解决问题 if #avail
UIPasteboard
,它只在UIKit
中可用,而watchOS不可用。虽然我可以毫无问题地将UIKit导入此文件,但当我使用UIPasteboard
时,它将不会编译,因为watch扩展插件不知道它
如何在我的手表应用程序可用的类中使用UIPasteboard
我想知道我是否只能在设备不是Apple Watch时使用#available
运行该代码,但这并没有解决问题
if #available(iOS 7.0, *) {
UIPasteboard.generalPasteboard()...
//ERROR: Use of unresolved identifier 'UIPasteboard'
} else {
//don't use UIPasteboard
}
也许您可以使用扩展名来分解
UIPasteboard
功能,并将仅包含扩展名的文件包含在iPhone目标中
理想情况下,多个操作系统共享的代码应该只包含真正共享的代码
此外,如果需要条件,可能是一种更简洁的方法。使用Swift中定义的现有预处理器指令:
#if os(iOS)
//UIKit code here
#elseif os(watchOS)
//Watch code here
#endif
有关预处理器指令,请参阅文档。有两种方法 第一种方法是使用预处理器指令,如以下示例:
#if os(iOS)
//Insert UIKit (iOS) code here
#elseif os(watchOS)
//Insert WatchKit (watchOS) code here
#endif
第二种方法是确定代码是从WatchKit扩展还是从iOS应用程序调用的。例如,您可以在从WatchKit扩展调用代码之前将全局布尔标志设置为
true
,在从iOS应用调用之前将全局布尔标志设置为false
。然后,共享代码可以检查标志的值,以确定它正在iOS或watchOS上运行。全局变量将不起作用。不管变量值是多少,代码都不会编译。