iOS 摸鱼周报 #84 | 开箱即用的云服务 AirCode

本期概要

  • 本期话题:开发加速器:在 App 或游戏内创造无障碍体验
  • 本周学习:Any 和 AnyObject 以及 AnyClass
  • 内容推荐:依赖注入、自定义 Button 外观与行为、正则表达式、创建 XCFramework 以及创建可配置的小组件文章推荐
  • 摸一下鱼:一个白噪音网站;ChatGPT 飞书机器人配置;在线 NodeJS 平台 AirCode;ChatGPT for stackoverflow 浏览器插件
  • 内推招聘:[上海] 小红书 - 社区客户端团队 - 基础体验方向

本期话题

设计开发加速器线上讲座:在 App 或游戏内创造无障碍体验

@远恒之义:Apple 提供了业界领先的旁白功能,是专门为失明及低视力群体服务的屏幕阅读工具,帮助他们便捷地探索 Apple 设备图像中的人物、文字、表格等数据。本次课程将通过 Apple 操作系统内置的辅助功能、辅助功能 API 和开发者工具,开发者们可以为每个用户创建绝佳的无障碍体验。

活动时间:2023 年 2 月 21 日上午 10:00 (GMT+8) – 中午 12:15 (GMT+8) (UTC+08:00)

报名截止:2023 年 2 月 20 日

通过“标记”为图像添加的描述,在使用“图像探索视图”时,“旁白”可朗读自定义描述

本周学习

整理编辑:JY

Any 和 AnyObject 以及 AnyClass

AnyObject :可以表示任何类类型的对象实例,所有类都隐式地遵循 AnyObject

Any :可以表示任何类型,包括基础数据类型、枚举类型、结构体、函数类型等;

AnyClass :表示类的元类型,是 AnyObject.Type 的别名:定义 typealias AnyClass = AnyObject.Type;

AnyObjectAny 的子集
AnyObject.Type,或者说 AnyClass 所表达的其实就是任意类型本身
// 所有的 class 都隐式地实现了这个接口,这也是 AnyObject 只适用于 class 类型的原因,但是并不能代表 struct 类型 
protocol AnyObject {}
// 如果是AnyObject则会编译错误,但是换成Any后则不会
let swiftInt: Int = 123
let swiftString: String = "haha"

var array: [Any] = []
array.append(swiftInt)
array.append(swiftString)
class A {
   class func test(){
     print("test")
   }
}

//.self 可以用在类型后面取得类型本身,也可以用在某个实例后面取得这个实例本身
let typeA: A.Type = A.self
typeA.test() // print test 

let classA: AnyClass = A.self
(classA as! A.Type).test() // print test

内容推荐

本期将推荐近期的一些优秀博文,涵盖依赖注入、自定义 Button 外观与行为、正则表达式、创建 XCFramework 以及创建可配置的小组件等方面的内容

整理编辑:东坡肘子

1、依赖注入和依赖注入容器 -- 来自:SwiftFun

@东坡肘子: 依赖注入是一种常见的设计模式,在合适的时候使用它,可以提高开发者的代码质量。本文作者将从什么是控制反转、什么是依赖注入、依赖注入的种类、依赖注入容器等多个方面对该种设计模式进行探讨。

2、自定义 Button 的外观和交互行为 -- 来自:东坡肘子

@东坡肘子: 通过 Style 改变组件的外观或行为是 SwiftUI 提供的一项非常强大的功能。本文将介绍如何通过创建符合 ButtonStyle 或 PrimitiveButtonStyle 协议的实现,自定义 Button 的外观以及交互行为。

3、Swift 正则表达式教程 -- 来自:Ehab Yosry Amer

@东坡肘子: 从 5.7 版本开始,Swift 终于推出了与时代相匹配的正则表达式处理能力。在本文中,作者将引领开发者掌握 Swift Regex 的模式匹配,学习编写易于理解的正则表达式,使用捕获并试用 RegexBuilder。

4、创建 XCFramework -- 来自:Joe Heck

@东坡肘子: 在 Joe Heck 看来,将 Rust 库暴露给 Swift 的最佳途径是通过基于 C 的 FFI 接口。由于关于如果制作 XCFramework 的细节资料相当稀少,作者为此花费了相当多的精力才得以实现。本文旨在分享从静态库空间进入 Swift 的一些具体实现细节。

5、如何使用静态选项创建可配置的小部件 -- 来自:Lee Kah Seng

@东坡肘子: 小组件的主要理念是让用户快速、方便地获取与他们最相关的信息。为了使这一想法更上一层楼,我们可以让小组件成为可配置的,这允许用户自行选择在小组件上显示什么数据以及如何显示。本文将重点关注具有静态选项的可配置小部件,展示如何设置配置 intent、实现 intent timeline 提供程序并创建一个可配置的小组件。

摸一下鱼

整理编辑:zhangferry

1、白噪音网站:提供多种白噪音,并支持不同声音的混合,网站设计很简洁。

2、ventusky:一个查看天气详情的网站,提供的功能非常全,界面做的也很漂亮。

3、ChatGPT-Feishu:一个飞书版本的 ChatGPT 机器人配置教程,这个教程比较简单,通过 AirCode(一个在线的云服务平台) 平台屏蔽了服务器搭建这一步,要做的只是权限和环境变量的配置。注意事项:需绑定一个企业账户,由企业管理员申请才能通过。

4、AirCode:AirCode 是一个在线开发和部署 Node.js 应用的平台,为全栈工程师量身定制,目标是让开发变得简单。通过提供极致简单的 WebIDE 和开箱即用的云服务,让开发者无需再操心后端选型、环境搭建和线上运维等一系列繁琐之事,只需打开浏览器即可完成产品开发,并部署到全球节点。

目前提供云函数、数据库、文件存储等功能。它在一定流量下是免费的,对于个人开发来说,这个免费流量非常充足。

5、stackoverflow.gg:一个浏览器插件,让 ChatGPT 来回答 StackOverflow 上的所有问题,包括那些没人回答的问题。虽然 Stackoverflow 禁止 ChatGPT 来写答案,但不代表它不可以去回答这些问题。

这个团队同时还在做基于 AI 的代码调试和错误日志分析工具:Adrenaline,使用的是 OpenAI 提供的 API,所以你使用的话还需要配置对应的 API key。

内推招聘

[上海] 小红书 - 社区客户端团队 - 基础体验方向 - iOS/Android

岗位及团队介绍

基础体验技术团队负责小红书社区主站核心业务的研发工作,包括主链路首页、搜索、视频消费、新人onboarding等核心场景的业务开发、性能体验、用户体验与架构优化等工作,你可以充分参与到业务的讨论和落地,也可以发挥主观能动性为小红书的发展助力,我们希望你积极主动,热爱移动端产品的研发,愿意深入钻研,提倡提效,反对内卷,做正确、艰难而有价值的事。

主要职责

负责小红书社区主App研发,包括但不限于主App搜索及推荐整体框架的演进及频道相关探索、社区首页、社区搜索、视频消费及新人链路等核心模块的开发并编写高质量代码,参与业务架构设计和优化,代码Review,性能优化和质量把控,和产品经理,设计师,数据分析师配合,深度参与手机产品需求讨论,功能定义,参与新技术方向调研,新员工培养,指导并带领其他工程师共同完成研发任务,持续不断的优化代码结构,承担重点、难点的技术攻坚。

岗位要求

Android开发工程师

1、大学本科或以上学历,计算机相关专业,3年以上Android相关经验

2、对移动研发充满热情,有较强的学习能力,好奇心和积极向上的心态

3、熟悉Java/Kotlin语言,熟悉Android系统 API,RxJava,Dagger2,以及app 打包,测试,开发流程

4、代码基本功扎实,对数据结构及算法有一定程度的理解,良好的面向对象化编程思想,熟练运用常见设计模式

5、抗压能力强,具备良好的沟通表达能力和团队合作精神

6、有大型业务架构设计经验者优先,有跨端、动态化经验者优先

iOS开发工程师

1、大学本科或以上学历,计算机相关专业,3年以上iOS相关经验

2、对移动研发充满热情,有较强的学习能力,好奇心和积极向上的心态

3、熟悉Objective-C/Swift,熟悉Cocoa设计模式,深入理解MVC MVVM

4、代码基本功扎实,对于常见的第三方库的使用和原理有一定的理解。对数据结构及算法有一定程度的理解,良好的面向对象化编程思想,熟练运用常见设计模式

5、抗压能力强,具备良好的沟通表达能力和团队合作精神

6、有大型业务架构设计经验者优先,有跨端、动态化经验者优先

联系方式

邮箱:dkong@xiaohongshu.com

联系人:扶摇

微信:bridge_k(加微信备注下岗位+名字+工作经验)秒级通过

优势:Leader直招,秒级反馈,全程跟进,经验分享

关于我们

iOS 摸鱼周报,主要分享开发过程中遇到的经验教训、优质的博客、高质量的学习资料、实用的开发工具等。周报仓库在这里:https://github.com/zhangferry/iOSWeeklyLearning ,如果你有好的的内容推荐可以通过 issue 的方式进行提交。另外也可以申请成为我们的常驻编辑,一起维护这份周报。另可关注公众号:iOS成长之路,后台点击进群交流,联系我们,获取更多内容。

往期推荐

iOS 摸鱼周报 #83 | ChatGPT 的风又起来了

iOS 摸鱼周报 #82 | 去中心化社交软件 Damus

iOS 摸鱼周报 #81 | Apple 推出 Apple Business Connect

iOS 摸鱼周报 #80 | 开发加速器 SwiftUI 中管理数据模型

喜欢周刊 → 支持一下 ❤️