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
如果类型作为可选类型返回,那么您将在此处收到编译时错误,因为MyLayerTypeHere
和MyLayerTypeHere?
是不同的类型。
【讨论】:
谢谢。无论如何,我认为苹果应该统一这一点。您可以在引擎盖下拥有不同的范例,并且语言是相同的。这些无关紧要的事情的微小差异会扼杀一切。 语言是一样的,不同的是OS X和IOS使用不同的API。 OS X 中的视图仅在您请求时才由图层支持,因此从 OS X 中的视图获取图层可以轻松返回 nil,而 IOS 中的视图不能为图层返回 nil。以上是关于OSX 上的 Swift 与 iOS 版本不同吗?的主要内容,如果未能解决你的问题,请参考以下文章