草庐IT

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

zhangferry 2024-04-06 原文

本期概要

  • 本期话题:开发加速器:在 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 所表达的其实就是任意类型本身

Swift // 所有的 class 都隐式地实现了这个接口,这也是 AnyObject 只适用于 class 类型的原因,但是并不能代表 struct 类型 protocol AnyObject {}

```Swift // 如果是AnyObject则会编译错误,但是换成Any后则不会 let swiftInt: Int = 123 let swiftString: String = "haha"

var array: [Any] = [] array.append(swiftInt) array.append(swiftString) ```

```swift 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 中管理数据模型

有关iOS 摸鱼周报 #84 | 开箱即用的云服务 AirCode的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  8. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐