美文网首页小斑程序员iOS Developer
填平macOS和iOS之间的鸿沟 - Swift篇

填平macOS和iOS之间的鸿沟 - Swift篇

作者: MarkNote | 来源:发表于2017-03-29 06:56 被阅读960次

tags:开发随笔

上次写了一篇填平macOS和iOS之间的鸿沟,总结了在macOS和iOS之间共享代码的设计和实现,是基于Objective-C 的。

自从Swift诞生之后,关于Objective-C和Swift之间优劣对比的讨论就从没间断。

其实两种语言我都在用。Objective-C用的多一些,Swift稍微少一些。刚从XCode6.x 升级到XCode 7.X的时候,曾经为Swift编译后的超大的体积严重的郁闷了一阵子,还愤愤的把MarkNote中原先用Swift写的一部分代码完全用Objective-C重新实现了一遍。

不过新的应用,我基本上都是选择用Swift直接写了。从之前的事情之后,不太喜欢混编了。要么用OC,要么用Swift。

Swift编译技术一直在改进,不过依然有不少问题。包括编译慢等等。更重要的一个原因是,在一个工程中用两种语言写代码,一会OC,一会Swift,对大脑的刺激也是很大的,说不定会增加精神分裂的可能性呢,呵呵。

最近又在做一个既有mac端又有iOS端的应用。于是,老问题又来了,如何用Swift写即支持macOS,又支持iOS的代码?

我的策略还是类似的:

  • 使用Preprocessor directives来做判断OS;
  • 使用typealias来区分引用Cocoa或者UIKit中的类;

说起来比较抽象,还是看代码吧。

比如,我写了一个NSColor的extension:

import Foundation
import Cocoa
extension NSColor {
    class func colorWithHex(
//实现略

现在要让它同时也支持UIColor,那么代码是这样的:

import Foundation
#if os(OSX)
    import Cocoa
    typealias BaseColor = NSColor
#elseif os(iOS)
    import UIKit
    typealias BaseColor = UIColor
#endif
extension BaseColor {
    class func colorWithHex(
//实现略

经过简单的处理,一个同时支持macOS和iOS的Color 扩展就成功了。如此类推,可以让代码在两个平台之间最大限度的复用。

是不是很简单呢?

相关文章

  • 填平macOS和iOS之间的鸿沟 - Swift篇

    tags:开发随笔 上次写了一篇填平macOS和iOS之间的鸿沟,总结了在macOS和iOS之间共享代码的设计和实...

  • 填平macOS和iOS之间的鸿沟

    tags:开发随笔 虽然mac存在了很多年之后才有了iOS,但是对很多程序员而言,可能是先熟悉了 UIKit之后才...

  • swift-学习1

    swift的简介 Swift 是一种新的编程语言,用于编写 iOS,MacOS, watchOS 和tvOS 的应...

  • Swift教程之基础概述

    基础概述 Swift是iOS,macOS,watchOS和tvOS应用程序开发的新编程语言。 Swift提供了所有...

  • Swift 学习指南(中文版)

    关于 Swift Swift 是一种新的编程语言,用于编写 iOS,macOS 和 watchOS应用程序。Swi...

  • Swift编程

    简介 Swift 语言由苹果公司在2014年推出,用来撰写 macOS 和 iOS 应用程序 Swift 语言学习...

  • swift基础知识大全

    SWIFT是iOS、MacOS、Watch OS和tvOS应用程序开发的一种新的编程语言。尽管如此,SWIFT的许...

  • swift4.1 系统学习一 简介以及基本类型

    /*swift学习笔记1 简介swift出现的目的:为了简化macOS和iOS开发特点:1.开源2.跨平台3.面向...

  • swift-基础部分1

    简介 Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 ...

  • swift-基本结构

    基础部分 Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你...

网友评论

  • 暮雨落星辰:我不明白,为什么不用继承多态,非要用宏,想起几年前做c++的时候,攒了一二十年代码,满屏的#if根本就看不清楚逻辑
    暮雨落星辰:@MarkNote 写一个接口,然后两个实现类包装一下
    MarkNote:@暮雨落星辰 哦,那你准备继承NSColor还是UIColor呢?
    家振要翻天:@暮雨落星辰 oc继承 和 java继承不一样

本文标题:填平macOS和iOS之间的鸿沟 - Swift篇

本文链接:https://www.haomeiwen.com/subject/aoteottx.html