Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Watch app使用的文件中有条件地使用UIKit_Ios_Swift_Watchkit_Swift2_Watchos 2 - Fatal编程技术网

Ios 在Watch app使用的文件中有条件地使用UIKit

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

我已经创建了一个模型类,我在iOS应用程序和手表应用程序中使用它-它包含在两个目标中。现在我必须在这个类中使用
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上运行。

全局变量将不起作用。不管变量值是多少,代码都不会编译。