OSX 上的 Swift 与 iOS 版本不同吗?

Posted

技术标签:

【中文标题】OSX 上的 Swift 与 iOS 版本不同吗?【英文标题】:Is Swift on OSX different from the iOS version? 【发布时间】:2015-03-02 17:48:37 【问题描述】:

我想获得 CALayer 的边界。

在 OSX 上我必须这样做

let bounds = rootLayer?.bounds

ios 上,这个

let bounds = rootLayer.bounds

然后将此边界分配给另一层,我必须这样做

在 OSX 上

anotherLayer.bounds = bounds!

在 iOS 上

anotherLayer.bounds = bounds

为什么? iOS和OSX上的swift有什么不同吗?那会很糟糕。

在这两种情况下,rootLayer 都是这样设置的

let rootLayer = vista.layer

【问题讨论】:

如何将值设置为rootLayer?这一切都源于这样一个事实:在 OSX 上这似乎是一个可选的,而在 iOS 上它不是可选的。 在这两种情况下let rootLayer = vista.layer @AlexWayne - 这不是重点。这里的重点是 Apple 应该使两个平台的语言相同。 这就是完全的重点。语言是一致的。平台 API 不是。 图层属性在 OS X 中返回一个可选项,因为图层在 OS X 中是可选的——除非您告诉它们,否则视图不受图层支持。在 iOS 中,视图总是由层支持,因此该方法不返回可选项。 Apple 可以让它在 iOS 中返回一个可选项(以统一它),但是你必须解包一些不需要解包的东西。 【参考方案1】:

Swift 的语言一样的。 UI 框架和 API 不一样,这是意料之中的,因为 UI 范例不一样。

我不知道您从哪个 API 填充 vista。但是在某个地方,你有一个在 OSX 和 iOS 上定义略有不同的 API。在 OSX vista.layer 返回和可选,在 iOS 上返回非可选。当你找到那个位置时,你可以更正它,并在那里解开可选的。

最后,隐式类型在这里对你没有好处。如果您将 rootLayer 声明更改为:

let rootLayer:MyLayerTypeHere = vista.layer

如果类型作为可选类型返回,那么您将在此处收到编译时错误,因为MyLayerTypeHereMyLayerTypeHere? 是不同的类型。

【讨论】:

谢谢。无论如何,我认为苹果应该统一这一点。您可以在引擎盖下拥有不同的范例,并且语言是相同的。这些无关紧要的事情的微小差异会扼杀一切。 语言是一样的,不同的是OS X和IOS使用不同的API。 OS X 中的视图仅在您请求时才由图层支持,因此从 OS X 中的视图获取图层可以轻松返回 nil,而 IOS 中的视图不能为图层返回 nil。

以上是关于OSX 上的 Swift 与 iOS 版本不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 特殊关键字

在iOS版本中稳定的String的哈希值?

swift iOS / OSX / Swift中的精确计时

swift 雨燕 新手教程

NSString 散列在不同版本的 iOS(不是 OS X)中具有相同的值吗?

OSX 10.10 Yosemite 上的 iOS 6.1 模拟器