换行符的跨平台噩梦:Windows 与 Mac 的隐形差异
作为开发者,你是否遇到过这样的情况:在 Windows 上完美运行的代码文件,传到 Mac 上后突然出现了奇怪的错误?或者反之?这很可能是由于一个看似微不足道的字符造成的 - 换行符。
作为开发者,你是否遇到过这样的情况:在 Windows 上完美运行的代码文件,传到 Mac 上后突然出现了奇怪的错误?或者反之?这很可能是由于一个看似微不足道的字符造成的 - 换行符。
Update (2024-11-05): 阅读了一些新的文章,补充更多细节。
在 Flutter 开发中,我们经常需要创建可重用的组件。这些组件可以是简单的 UI 元素,也可以是复杂的布局结构。
一般主要有两种方式来定义这些组件:
很多人使用函数创建组件,更多的考虑是速度,更快的编码。不可否认的是,相比类组件而言,函数组件省了好几行代码,比如构造函数和变量定义部分。在我的工作中,也经常看见大量使用函数返回 widget 来创建组件,但是官方的 Flutter 团队更推荐使用类。
为什么?本文将详细探讨这一原因。
在Flutter开发中,确保使用类(Class)创建的组件具有良好的可测试性是至关重要的。
Combine 框架是 Apple 提供的一种用于处理异步事件的强大工具。它允许我们以声明式的方式编写功能性反应式代码,简化了异步编程的复杂性。本文将深入探讨 Combine 框架中的常用操作符,帮助开发者更好地理解和应用这一框架。
2023 年 7 月 5 日,Apple 发布了 Xcode 15 Beta 3。为了尝鲜,我立马安装了一下,然后在 Release Notes 的 Previews 章节看到有这么一句话:
The
#Preview
can now be used in projects with deployment targets prior to iOS 17 and macOS 14. Usages of#Preview
for SwiftUI can also be previewed on OS versions earlier than iOS 17 and macOS 14 by adding@available(iOS 16.0, macOS 13.0, *)
to the#Preview
(or whichever version you’d like to preview). Usages of#Preview
for UIKit & AppKit views and view controllers, and for widgets can’t be previewed on OS versions prior to iOS 17 and macOS 14. (110676526)
意思很简单,#Preview
支持 iOS 17 之前的 SwiftUI,但是不支持 iOS 17 之前的 UIKit 的 view 和 view controller 预览。刚高兴了一秒钟,立马被打回原型。
WWDC 2023 这几天陆续放出各个主题的视频,挑了几个我认为值得看看的,学习一下并做个笔记。当然目前大部分系统、软件都是 Beta 版本,正式版本可能还会更改,但整体更新内容是不会大变的。
我挑的第一个视频是 What's new in Xcode 15,工欲善其事,必先利其器。
下面将根据视频的播放顺序,分析并实践各个段落部分。
2023 年 6 月 9 日,测试 Xcode 15 Beta 版本。
2023 年 的 Google I/O 大会 于 5 月 10 日开幕,采用现场直播的形式。
本届大会的核心主题是 AI,Google 为了对抗 OpenAI 的 ChatGPT 真是费了老大劲。
本文有选择的提取 Flutter 相关的主题演讲和 Codelab,偏向于纯 Flutter 开发相关的内容,过滤对 Google 业务相关的主题,比如 Material You 和 Firebase 等内容。
其实,我们在平时的开发中,只需要关注 Flutter 官网即可,那里就有最新的 Flutter 版本更新,已经今后的 Roadmap。Google I/O 提供的 Flutter 相关的演讲,更多是偏实践类的建议,或者 Google 员工在使用 Flutter 时是怎么考虑的,以及 Flutter Team 背后的故事。
在 SwiftUI 中,环境变量是一种强大的机制,允许我们在视图层次结构中传递数据,而无需通过每个视图的参数进行显式传递。这种机制使得我们可以轻松地管理全局状态和配置。本文将深入探讨 SwiftUI 的环境变量,包括如何定义、使用和扩展它们。
此篇文章由 AI 辅助生成,本人对内容进行校对格式化,并添加参考文章。
在 Swift 5.7 中,any
和 some
关键词具有不同的用途。any
关键词用于创建存在类型(existential type),它表示一个遵循特定协议的任意类型。在 Swift 5.7 中,创建存在类型时,必须使用 any
关键词,否则会出现编译错误。
与之相反,some
关键词用于创建不透明类型(opaque type),它表示一个遵循特定协议的具体类型,但该类型在编译时是未知的。some
关键词在 Swift 5.1 中引入,对于 SwiftUI 的 View 协议至关重要,因为 View 协议定义了关联类型,不能直接用作类型。简而言之,any
关键词表示一个遵循特定协议的任意类型,而 some
关键词表示一个遵循特定协议的具体但未知类型。这两个关键词都应用于协议,但它们在泛型和协议处理方面有着不同的作用。
最近有一个需求,点击按钮时增加振动效果。
import UIKit
import AudioToolbox
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 这句话会使iPhone产生震动效果,可以加在按钮里面。
let soundID = SystemSoundID(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSoundWithCompletion(soundID) { }
}
}