【问题标题】:Is Swift on OSX different from the iOS version?OSX 上的 Swift 与 iOS 版本不同吗?
【发布时间】: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 中返回一个可选项(以统一它),但是你必须解包一些不需要解包的东西。

标签: ios macos cocoa cocoa-touch swift


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2015-11-10
  • 2017-03-05
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多