mac swift_swift-macos - CSDN
  • 点击上方“CSDN”,选择“置顶公众号”关键时刻,第一时间送达!在我的软件工程师生涯中,只有为数不多的几次被一种语言的设计和理念的美丽所折服,进而从中获得灵感。比如:Lu...
        

    点击上方“CSDN”,选择“置顶公众号”

    关键时刻,第一时间送达!

    640?wx_fmt=png

    在我的软件工程师生涯中,只有为数不多的几次被一种语言的设计和理念的美丽所折服,进而从中获得灵感。比如:

    • Lua:简洁,模块化,以及严格遵循清晰的设计目标。

    • Objective-C / Cocoa:对C语言极其简单的面向对象扩展,在保证一致性、清晰性的同时,做到了与已有的C和C++代码最佳的互操作性。当然这归功于Cocoa和它的设计理念、目的以及推动力。

    • Erlang / OTP:角色模型最强大的实现,轻量级进程的概念,以及构建分布式系统极其容易。而且由于是纯函数式编程,最大的好处就是可以随时看到所有的状态变更,用以分析并修复错误。

    • Ruby (on Rails):纯粹的面向对象,任何东西都是对象,是一门完全的面向对象脚本语言。Rails则在其上构建了漂亮的MVC抽象,而且优美地运用了Ruby语言的动态性。在所有部分中,我最仰慕的就是XML视图的Builder部分。

    当然,没有一种语言或语言框架的结合体是完美的。但它们都有一个共同点:一组定义明确、经过谨慎选择的设计目标,并根据使用场景进行过精心裁剪。这些目标会指导使用者在使用语言时保持语言的优美和一致性。

    然后我们来对比下Swift。

    首先要问的问题是:它做到了哪一点?想想吧。并没有明确的答案。它只是想变得更好、更现代,并且成为统治未来的唯一语言。这是给所有想用Swift重写代码的人的第一个警告,从一开始,它就想成为无所不能的语言:

    • 它应该适用于从应用和界面到底层系统的一切情况;

    • 它应该与现存的Foundation和Cocoa有良好的互操作性,但同时应该拥有自己广泛的标准库,这导致了许多重复;

    • 它同时是函数式、面向对象和面向协议语言;

    • 它希望成为强类型语言,但它的类型推断却如此方便,从设计上导致简单表达式变得过于复杂难以管理,真是搬起石头砸自己的脚;

    • 它是编译型的静态语言,但却强调其交互式界面和练习界面,使之看上去像是脚本语言一样。其实它不是;

    • 似乎它的原动力是编译器的需求,以及与静态分析器之间需要填补的空白。然而它考虑的并不是应用开发者的实际需求:高效,易用,以及(iOS)应用开发方面的高生产力;

    • 它打算在练习场和学习方面提供简单、渐进式的学习过程。同时,学习以及阅读Swift的书籍和标准库更像是在试图掌握C++,极其复杂、严厉,不平易近人。

    在这之上,它还对许多Objective-C的特性做出武断的结论,而许多经验丰富的开发者们却认为这些特性是优点,而不是问题:

    • 增加了编译时静态调度(compile time static dispatch),使得动态调度和消息传递(dynamic dispatch and message passing)成了二等公民,使得自省(introspection)无用武之地;

    • 定义了便捷优雅的nil消息传递,结果只带来了一系列问题而已;

    • 单纯地将对象的隐含选项(implicit optionality of objects)归类为bug的来源。

    同时,对于目前和将来最重要的计算问题,它并没有尝试解决或提供支持。这些问题比任何它试图做好的领域都要重要:

    • 并发;

    • 分布式系统;

    • 整体API交互的复杂度;

    • 可调试性;

    • 实际的应用和界面开发;

    • 开发者生产力。

    它总是承诺未来的成功,然而提供的仅仅是一条需要极大工作量的路。没有稳定的收入来源,许多使用Objective-C的应用仅仅能通过编译而已,不能轻易享受到设备的新特性,还有可能会被从App Store下架,只因为升级的成本太高。如果你是个独立开发者,你应该很清楚这种情况。尽管现在这种情况应该已经不存在了,但伤害却实实在在地造成了。

    比这些情况更严重的是Swift与现有的苹果框架生态系统之间的紧张局势。

    尽管苹果已经尽力让Cocoa/Foundation能融合进Swift,但由于Swift的设计方式和现有框架的设计模式,使得局势仍然紧张。这种紧张局势仍然没有解决,并且由于是设计上的冲突,从本质上来说不可能解决,只能减轻。旧的Cocoa基础设计模式是代理、数据源、扁平的类继承关系等,而新的设计包括集合类等,以及易用的API等。

    如果你尝试过Swift与传统框架的结合,就会发现需要经常在Swift/标准库的方式、Cocoa方式和两者结合的方式间来回切换。更糟糕的是,许多概念甚至没有好的替代品,至少这一点给我造成了不可避免的精神负担。它会阻碍我的思维,使我陷入一种认知的循环,试图找出最好的表达问题的方式,或者说让Swift对我的代码满意。

    雪上加霜的是,所有这些努力都无助于解决真正的问题:写一个好的、易用的应用或框架。这正是Objective-C / Cocoa花费了大量努力试图解决并提高开发者生产力的问题。

    没错,Swift代码可能最终会更正确、更好。它也可能会提前警告你那些极端情况。但是其副作用就是,它会限制你写代码时的创造力。开始写代码时,我并不知道怎样才能最好地表达API,所以我会尝试不同的方式直到找到合适的,然后再继续写代码。

    然而Swift总是在要求我回答我不想立即回答的问题,从而分散我的注意力。没错,暂时来看我的代码也许并不正确,但这就是我在设计阶段想要的东西。寻找概念,找到最合适的做法,然后再快速迭代。

    所以我从基础设计上就十分反对Swift。在我看来,它就像是你头上的魔鬼,总是把你的注意力从问题域中拉走,强迫你完全按照正确的方式,或者说更Swift的方式来做事。同时,它对大型变更又十分不友好。有没有试过把代码从对象改回结构(Struct),或者反之?

    Objective-C曾经有过,现在也有十分优美的渐进式方式,你可以先建立原型,然后通过各种工具一点点改进原型,直到找到正确的方式。你可以打开更多的警告,运行静态分析器,并朝着C或C++的方向进行优化。

    Swift推出到现在已经四年了。现在吸取经验并改变方向,建立更好的Objective-C,真正地去关心平台的目标和概念,还不算晚。

    在我看来,许多还没有达到的“高级的目标”甚至都不应该算作目标。想一想,Objective-C何时像Swift那样得到过苹果的这么多推动和关注?Swift最终到处都是妥协,最后一事无成。

    我很希望看到这样的改变,但平心而论,这种改变基本上不可能发生。并不是说Swift的生态系统不会产生能提高生产力的东西。但是,至少对于我而言,Swift肯定不是本文开头提出的那些优美语言或语言框架组合之一。对于我来说,Swift不仅是个忧伤的结局,而且毫无必要。

    那么,根据我对Swift的反对观点,下一步该怎么走呢?幸运的是还有许多路可以探索:

    • Rust:一种强类型语言,其方向和目的都十分明确。一般来说我不喜欢强类型系统,但对于底层问题而言,强类型显然有它的用处。我希望获得这些好处,并多了解些底层的世界。

    • Elixir / Phoenix:在我看来就像是rails和erlang。希望它们名副其实。

    • 我不会完全脱离苹果的生态系统。即使它漏洞百出,Mac和iOS设备依然是最好的。但是,我不会在以后的软件工程中使用Swift,希望可以做到这一点。

    原文:https://rant.monkeydom.de/posts/2018/06/10/on-my-misalignment-with-apple_s-love-affair-with-swift

    作者:Dominik Wagner

    译者:弯月,责编:郭芮

      征稿啦!

    CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
    如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。





    ————— 推荐阅读 —————

    点击图片即可阅读

    640?wx_fmt=png

    640?wx_fmt=png

    640?wx_fmt=png

    640?wx_fmt=png640?wx_fmt=gif

    展开全文
  • Swift开发Mac App(2)

    2015-04-20 15:58:03
    数据模型接下来创建数据模型。首先我们来熟悉一下Xcode项目文件的组织结构:默认模板会创建一个以项目名称为名的文件夹。在这个文件夹下有一个supporting files的子文件夹,其中存放plist和资源文件。...

    数据模型

    接下来创建数据模型。

    首先我们来熟悉一下Xcode项目文件的组织结构:


    默认模板会创建一个以项目名称为名的文件夹。在这个文件夹下有一个supporting files的子文件夹,其中存放plist和资源文件。当项目很大时,会创建大量的文件,查找文件就会变得很困难。因此我们需要有一个良好的项目文件组织形式。

    首先,我们新建一个文件夹(group),命名为GUI。在ScaryBugsMac文件夹上点击右键,将弹出一个快捷菜单,选择NewGroup,然后输入GUI。

    然后将所有跟UI有关的文件拖到这个文件夹( AppDelegate.swiftMasterViewController.swift/.xiband MainMenu.xib),如下图所示:


    然后新建另一个文件夹Model。


    在Model文件夹中将包含如下内容

    ·      ScaryBugData: 包含两个属性:昆虫的名称及昆虫的估价。

    ·      ScaryBugDoc: 包含3个属性:昆虫图片、昆虫缩略图及一个ScaryBugData属性。

    实现模型对象

    注意: 如果你阅读过 How ToCreate A Simple iPhone App on iOS 5 Tutorial, 你会发现接下来的内容和那篇教程中的相应内容几乎一模一样。这是因为Mac和iOS编程大部分SDK都是系统的,除了UI和操作系统相关的API。而模型对象不涉及UI,因此模型对象的代码基本是一致的。

    对于ScaryBug的模型类,将Mac版本与iOS版本只有一个地方不同,即将UIImage类修改为NSImage即可。当然,你也需要将它从O-C实现修改为Swift实现。

    在Model文件夹上点击右键,点击 “New File…”,然后选择OS X\Source\Cocoa Class 模板,然后点击Next。


    类名输入 ScaryBugData, Subclass of 输入 NSObject ,点击 Next。


    在最后一个弹出界面中,点击Create。项目导航窗口将显示如下:


    打开ScaryBugData.swift 替换为如下内容:

    import Foundation  

    class ScaryBugData: NSObject {

       var title: String

       var rating: Double  

       override init() {

        self.title = String()

        self.rating = 0.0  

    }

    init(title: String, rating: Double) {

         self.title = title

         self.rating = rating  

    }

    }

    然后创建另一个模型对象ScaryBugDoc

    打开ScaryBugDoc.swift 编辑为如下内容:

    import Foundation

    import AppKit  

    class ScaryBugDoc: NSObject {

       var data: ScaryBugData

       var thumbImage: NSImage?

       var fullImage: NSImage?

    override init() {

         self.data = ScaryBugData()

       }

    init(title: String, rating: Double, thumbImage: NSImage?, fullImage: NSImage?) {

         self.data = ScaryBugData(title: title, rating: rating)

         self.thumbImage = thumbImage

         self.fullImage = fullImage 

     }

    }

    注意thumbImage 和fullImage声明为可空的 NSImage ,因此他们不需要在默认构造函数中初始化。

    打开MasterViewController.swift ,增加一个属性声明:

    var bugs = [ScaryBugDoc]()

    这个数组属性用于存储昆虫列表,接下来我们将会用一些数据填充这个数组。

    填充数据及图片

    MasterViewController 需要用一系列昆虫来填充。你可以从此处下载所需的

     昆虫图片

    下载完图片之后,,将所有图片从Finder中拖到Images.xcassets中如下图右边AppIcon之下的位置:


    打开 MasterViewController.swift 添加如下方法:

    func setupSampleBugs() {

       let bug1 = ScaryBugDoc(title: "Potato Bug", rating: 4.0,

         thumbImage:NSImage(named: "potatoBugThumb"), fullImage: NSImage(named: "potatoBug"))

       let bug2 = ScaryBugDoc(title: "House Centipede", rating: 3.0,

    thumbImage:NSImage(named: "centipedeThumb"), fullImage: NSImage(named: "centipede"))  

       let bug3 = ScaryBugDoc(title: "Wolf Spider", rating: 5.0,

    thumbImage:NSImage(named: "wolfSpiderThumb"), fullImage: NSImage(named: "wolfSpider"))  

       let bug4 = ScaryBugDoc(title: "Lady Bug", rating: 1.0,

    thumbImage:NSImage(named: "ladybugThumb"), fullImage: NSImage(named: "ladybug"))

       bugs = [bug1, bug2, bug3, bug4]

    }

    打开AppDelegate.swift ,找到 applicationDidFinishLaunching方法,在addSubview之前加入以下代码:

    masterViewController.setupSampleBugs()

    编译运行程序,确保编译通过。

    接下来,我们将在UI中显示这些图片和数据。


    展开全文
  •  首先,Mac桌面级程序开发用的开发语言和开发工具和iOS开发都是一样,都是swift(或者Objective-C)和Xcode。  同时,很多在iOS上用的第三方库(网络请求,屏幕适配等等)绝大多数都支持Mac OX开发桌面程...

          本博文适合有iOS APP 开发经验,并且会用swift的开发人员。

           环境为 xcode10.1  swift4.2

     

         首先,Mac桌面级程序开发用的开发语言开发工具和iOS开发都是一样,都是swift(或者Objective-C)和Xcode。

         同时,很多在iOS上用的第三方库(网络请求,屏幕适配等等)绝大多数都支持Mac OX开发桌面程序。所以给与了有iOS开发经验的人很大的便利,比较轻松的转到Mac桌面开发。当然,iOS和Mac OX 开发主要在系统的视图组件和一些系统API不太一样。

    本文分二部分:

    第一部分为相关的学习参考资料网址

    第二部分为工程的一个创建

     

     

    一.列举学习参考的网站

    macOSk开发入门笔记

    https://blog.csdn.net/lovechris00/article/details/72779076

     

    二.工程基本创建

    1,用Xcode 创建Mac OS app 开发,如下图: 

     

     

    2,Mac OS 开发的项目结构和iOS的非常类似,如下图

     

     

     

     

     

    3.Appdegeate 及controller

     

    展开全文
  • mac编写swift脚本

    2019-07-27 04:54:24
    /usr/bin/env xcrun swift print("Hello World") 可以用Sublime Text编写,安装Swift包后有语法着色功能。然后自己加一个Build方案会更方便的。 当然vim,xcode和任何文本编辑器都可以。 假设文件保存到桌面...

    代码示例:

    #!/usr/bin/env xcrun swift
    print("Hello World")

    可以用Sublime Text编写,安装Swift包后有语法着色功能。然后自己加一个Build方案会更方便的。

    当然vim,xcode和任何文本编辑器都可以。

     

    假设文件保存到桌面,名字:test.swift

    然后给它可执行权限,直接调用就能看见结果了。

    在终端中输入:

    $ cd ~/Desktop
    $ chmod +x test.swift
    $ ./test.swift
    Hello World
    $

     

    转载于:https://www.cnblogs.com/Bob-wei/p/4893846.html

    展开全文
  •  本博文适合有iOS APP 开发经验,并且会用swift的开发人员。  环境为 xcode10.1 swift4.2   简单做一下iOS开发和Mac的相同点和不同点

     

          本博文适合有iOS APP 开发经验,并且会用swift的开发人员。

           环境为 xcode10.1  swift4.2

     

    简单做一下iOS开发和Mac的相同点和不同点

    展开全文
  • Swift开发Mac App(1)

    2017-06-28 10:41:24
    原文超级详细(图文),小白表示毫无压力:http://www.raywenderlich.com/87002/getting-started-with-os-x-and-swift-tutorial-part-1由于原文浅显到略显啰嗦,因此翻译时我有选择地删除了部分段落。打开Xcode,...
  • Swift开发Mac App(3)

    2015-04-22 14:00:25
    显示昆虫列表在 OS X中,Table View使用 NSTableView类,它等同于iOS的UITableView 类,但有一个最大的不同是:NSTableView 的每一行有多个列或多个单元格。· 在OS X 10.7Lion之前,table view cell继承于NSCell...
  • Swift开发Mac App(8)

    2015-05-15 21:23:16
    关注细节关于用户体验方面,我们仍然有一些细节值得注意。...作为程序员,你当然知道当用户什么都没选择的情况下,不应当执行任何操作,但对于用户而言,这种情况仍然显得不太友好:我们通过以下方式来解决这个问题:·...
  • 依赖库:最新版的 swift runtime 地址 support.apple.com/kb/DL1998?locale=zh_CN
  • Vmware Workstation 10.0虚拟机软件VM安装Mac解锁工具Unlock苹果操作系统(Mac OS X Mavericks 10.9.4) 下载地址:http://pan.baidu.com/s/1qWLkffQ password:ewb2 二、VMware Workstat...
  • Zewo UUID - 纯Swift轻松生成UUID
  • 我们知道新版的Xcode中提供了一个playground机制可以用来快速测试swift语言的原型代码,这很好很强大,尽管稳定性和速度还有待于提高;] 不过要玩playground还是要先打开Xcode,这多少让人不爽.这不禁让我联想到ruby中...
  • 基于Xcode 9, Swift 4, ORSSerialPort开发. 安装USB转串口驱动 常用的USB转串口芯片有 CH341, CP210X, PL2303, FT232等, 点击相应的名称下载macOS驱动并安装. 我这里使用的是CP2104. 安装完成后连接TFmini到macOS:...
  • 每当看到新的编程语言我总是会有相当大的兴趣,是的,Swift 3是一门『新语言』,因为它看起来,怎么都不像过往的 Swift。打开一个老的项目时,发现满目疮痍,基本上能标红的代码全被标红了。先来个截图提提神: 图...
  • 转发链接:... The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. This...
  • Swift中播放音频

    2020-05-02 22:40:59
    Swift中播放音频可以通过AVPlay,AVAudioPlayer和StreamingKit 进行播放音频 AVAudioPlayer 仅播放本地音乐文件,如果要播放网络文件需要将网络文件下载下来进行播放 AVPlayer既可以播放本地音频文件,也可以播放...
  • iOS与Mac反调试, 反逆向工具
  • Swift 调用 Shell 脚本

    2019-04-20 15:27:48
    最近在进行一个工作项目,需要在swift中调用shell脚本: Swift调用shell接口 1. GetQCRLog.swift // GetQCRLog // Created by Cyril on 7/19/18. // Copyright © 2018 Cyril. All rights reserved. import ...
  • swift流行UI库(github)

    2016-11-09 09:03:32
    http://www.cocoachina.com/ios/20161109/18007.html
  • 自2014年苹果推出新的语言编程 Swift ,就引来众人的热议。有人说 Swift 不过是各个语言的大杂烩,也有人说它是编程语言的集大成之作。 尽管热议不断,但是 Swift 还是凭借自身的魅力迅速杀入 Tioble 排行版前十...
1 2 3 4 5 ... 20
收藏数 12,229
精华内容 4,891
关键字:

mac swift