2016-01-21 85 views
1

是否可以将函数/计算变量标记为在OS X上可用且在iOS上不可用(反之亦然)?诸如@available(OSX 10.0, iOS unavailable)之类的东西。@available - 仅在OS X上可用

我了解#if OSX声明,但是,我想实现的东西,苹果已经为NSURLThumbnailKey做 - 它标记为ObjC NS_AVAILABLE_MAC(10_10);,编译器会抱怨这个符号是不可用的,而不是编译器不能解决符号。

而且,我发现,在雨燕#if语句是越野车,例如,定义func myFunc(_, arg1:)func myFunc(_, somethingElse:)#if范围内,将导致一个错误说myFunc已定义。这就是为什么我试图避免使用#if

回答

1

你应该能够做这样的事情:

@available(OS X 10.10, *) 

要高,​​只会迫使它OS X 10.10,或:

if #available(OS X 10.10, *) 

有上Hacking With Swift提供一些更多的信息。

多种规格:

@available(iOS, unavailable, message="nope") 
@available(OS X 10.10, *) 
func someFunc() 
+0

不幸的是,这一切确实是做出OS X 10.9或更低的符号不可用,但它仍然可以在iOS ... –

+0

这是奇怪的,该文档似乎表明,它应该只适用于OS X 10.10及更高版本,但我已经添加了另一个例子,这是一个棘手的解决方法。 –

+0

是的,但'*'是“未来平台”,通常包括所有iOS版本(这是许多Foundation方法标记的方式)。但多规格确实奏效,谢谢!我从来没有想过两个'@ available'声明...... –