239 天前 / 秦小风啊
苹果在 10 月 27 号 发布了 Xcode 13.2 beta 版本,这个版本最受开发者欢迎的无疑是 Swift Concurrency 的向后兼容性了,现在可以在部署到 macOS 10.15、iOS 13、tvOS 13 和 watchOS 6 或更高版本的应用程序中使用 Swift Concurrency。这种支持包括异步 / 等待、参与者、全局参与者、结构化并发和任务 API。 当然,除了这一条外,还有其它的一些更新,一起来看看。 Large Content ViewerVStack { Button("Tap me") { print("Button Tapped") } .accessibilityShowsLargeContentViewer() Button("Tap me 2") { print("Button Tapped") } .acces...
292 天前 / CoderStar
前言 对于编译型语言来看,有主要三种类型的函数派发方式,分别为: Direct Dispatch:直接派发 Table Dispatch:函数表派发 Message Dispatch:消息派发分析三种派发方式主要从性能及动态性两方面讨论,这两个特性相对而言是矛盾的,性能要求高,则动态性差,反之亦然,其中直接派发又被称为静态派发,函数表派发与消息派发称为动态派发,大多数语言都会支持上面派发方式的一种到多种。如 C 使用直接派发;Java 默认使用函数表派发,可以通过 final 修饰符修改成直接派发;C++ 默认使用直接派发...
330 天前 / 秦小风啊
前言老司机技术周报与淘系技术联合主办了今年的淘系技术。T 沙龙杭州专场。本次沙龙邀请了 4 位国内嘉宾,特邀了 2 位国外嘉宾。倾寒受邀为大家分享【淘宝工程渐进式拥抱 Swift】,皮拉夫大王基于这次分享视频为大家整理此文,辛苦二位!阅读原文,获取 PPT! 讲师简介:倾寒(淘系技术 - 终端平台技术 - 无线开发专家),主要负责 iOS Native 架构,与 Swift 生态布道,在淘宝工程完成多项重构工作,推动淘宝 Swift 工程实践。 编辑简介:皮拉夫大王,摸鱼周报联合编辑,现就职于 58 同城主 App 团队。主要专研方向为二进制静态扫描及 App 性能优化。
389 天前 / 楼外青山
再过一周的时间,WWDC21 就正式举行了,如果不出意外的话,Swift 5.5 测试版也会在期间发布。早在 3 月 13 日,官方论坛就公布了 Swift 5.5 版本的发布计划,并在 4 月 16 日拉出了 release/5.5 分支。经过几个月时间的准备,从 Swift Evolution 中,我们能发现 Swift 5.5 将为我们带来许多期待已久的特性,如 async/await。我们今天就来简单整理一下这些可能将在 Swift 5.5 中出现的新特性。 SE-0291 包集合 这个 proposal 旨在为 SwiftPM 添加对包集合的支持。包集合是包和相关元数据的列表,可以更轻松地发现特定用例的现有包。
394 天前 / 楼外青山
随着 Swift ABI 稳定,开发者对 Swift 的关注也持续升温,一些开源框架甚至已经不再提供 ObjC 版本了,部分苹果新出的系统库也是 Swift Only。 在这样的背景下,京东商城订单业务在不同场景下尝试更多的使用 Swift 开发,比如: 京东 App 部分订单业务页面 京东 App 物流小组件 “京东工作站”,为公司内部提供的集成部分工作环境与开发环境,以及部分工作流的 macOS 应用 在改造过程中,Swift 的高效安全与便捷和一些优秀特性给团队留下了深刻的印象。有很多特性是开发者在写 ObjC 时不会太多考虑的。
447 天前 / dreamapple
首先跟大家说一下我为什么会有这个想法吧,因为最近在空闲时间学习 Swift 和 SwiftUI 的时候会经常使用到这种叫做尾闭包的语法,就觉得很有趣。同时因为很早之前看过 jamiebuilds 的 the-super-tiny-compiler,就想着能不能自己也实现一个类似的有趣好玩简单的编译器。所以就有了 js-trailing-closure-toy-compiler 这个项目,以及今天的这篇文章。 对于不熟悉 Swift 的同学来说,我先来解释一下什么是尾闭包。简单来说,就是如果一个函数的最后一个参数也是一个函数,那么我们就可以使用尾闭包的方式来传递最后一个函数。
485 天前 / 美团技术团队
总第 436 篇 2021 年 第 006 篇 本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。写在前面本文涉及面广,篇幅较长,阅读完需要耗费一定的时间与精力。如果你带有较为明确的阅读目的,可以参考以下建议进行阅读: 如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节开始进行阅读,这会让你对预编译有一个更直观的了解。
585 天前 / hyper0x
在程序设计的时候,我们通常希望使用同样的数据结构或算法,就可以处理许多不同类型的元素,比如通用的 List 或只需要实现 compare 函数的排序算法。对于这个问题,不同的编程语言已经提出了各种各样的解决方案:从只是提供对特定目标有用的通用函数(如 C,Go),到功能强大的图灵完备的通用系统(如 Rust,C++)。在本文中,我将带你领略不同语言中的泛型系统以及它们是如何实现的。我将从 C 这样的不具备泛型系统的语言如何解决这个问题开始,然后分别展示其他语言如何在不同的方向上逐渐添加扩展,从而发展出各具特色的泛型系统。
602 天前 / Mr_Coder_
一、概要cocoapods-imy-bin功能点: 组件二进制化,无入侵式支持组件二进制化,完全自动化,无需手动操作。致力于解决Ci打包速度慢、研发编译慢等编译问题。本地配置文件 - Podfile_local二进制源码调试pod bin code,类似美团 iOS 工程 zsource 命令背后的那些事儿的效果。命令快捷键pod bin imy,如游戏快捷键,根据配置会在特定目录执行特定命令(如任意终端目录下,执行某个特定目录的pod update --no-repo-update命令),减少其他繁琐操作。支持任意个快捷键。
603 天前 / 携程技术
作者简介 青花瓷的平方,携程技术专家,主要从事无线开发,负责携程支付 iOS 相关开发工作。 一、引言 Combine.framework 是 Apple 在 2019 WWDC 上基于 Swift 推出的函数响应框架(Functional Reactive Programming),支持 Apple 全平台的操作系统(iOS13+,macOS 10.15+ 等)。函数式响应框架无论在哪个平台早已流行泛滥,开源的 Rx 更是实现了各种语言的响应式编程框架。Apple 在这个时候推出响应式框架,无疑是对自己护城河的进一步巩固。事实上 SwiftUI 的数据驱动就是依赖 Combine。
636 天前 / openio
背景 苹果在 2014 年发布了 Swift,这门语言一诞生就备受开发者们的关注。由于其多方面的优势和苹果的极力推崇,Swift 也愈演愈烈。但就如很多语言一样,初期的 Swift 也有许多诟病,一度让开发者们又爱又恨。近年,Swift 也逐步实现了 ABI 稳定、模块稳定、SPM 完善等等。我们的团队也从今年初将 Swift 混编提上日程,经过充分的调研工作和紧锣密鼓的混编实施后,在 7 月份已经顺利上线了。本篇文章对之前的调研内容重新做了梳理,在技术和环境等各方面做一个完备的分析。
678 天前 / mr7
ABI Stability & Module Stability 以及 Swift 优势 2019 年 Swift 5 发布,标志这门语言迎来了一个重大的里程碑。与之前的版本相比除了一些基础语法的改变,更重要的是 Swift5 对 Apple 所有平台都是 ABI(Application Binary Interface) 稳定的,即二进制接口兼容;对其他平台 Linux,Windows 等的 ABI 稳定,Swift 核心团队在 Swift 官网上也明确表示会持续跟进。 ABI 稳定带来的好处显而易见,使用 Swift5 构建的 App 将可以与 Swift 6 的标准库对话,如下图所示。
761 天前 / 静逸秋水
如果我们需要需要实现一个类似打印当前函数调用的文件名和函数的化,我们需要借助一些类库。 在 swift 中我们可以借助 #file 和 #line 来实现数据获取 /。 类似 public static func log(file: String = #file,line: Int = #line) {}而在 Android 我们需要借助 Thread 来实现 var str = ""try {val filename = Thread.currentThread().stackTrace[your_trace_index].fileNameval line = Thread.currentThread().stackTrace[your_trace_index].lineNumberstr = " $filename [l$line]"}catch (err: IOException) {// print(err)}return str 其中我们只需要确...
772 天前 / 静逸秋水
Swift 以前是通过 addObserver 来实现对某个属性的变化监听,而最新的变化,书写起开更加方便。 observer = test.observe(\.field, options: [.new, .initial]) { (object, change) inprint(change)}一定要用属性赋值当前的 observe 结果,没有的话可能会造成 change 不生效。 对 UIScrollView 的滚动监听,我们可以使用 UIScrollViewDelegate extension UIScrollViewDelegate{func scrollViewDidScroll(scrollView: UIScrollView){//do something}}这里推荐使用 Observe 比较方便的是可以进行模块的逻辑的拆分...
773 天前 / mr7
作者丨阿里文娱高级无线开发工程师 大斗如果以前不使用 Swift 的原因之一,是 Swift 不稳定造成的开发成本过大,那随着 Swift 5.0 的发布,终于可以抛开这个顾虑了。 01 背景 随着 Swift 5.0 的发布,Swift 的 ABI 终于稳定下来了。如果是很早就拥抱 Swift 的开发者,一定经历过各 Swift 大版本发布时的痛苦。回想在前一家公司将 Swift 2.2 升级到 Swift 3.0,基本上是换了个语言,两个版本之间的差异非常之大,升级起来简直是苦不堪言。