WWDC 23 Swift Student Challenge

WWDC 23 Swift Student Challenge

有幸在高中就参与过 WWDC 20 的 SSC,可惜当时课余时间并不充裕导致作品的质量并不理想,

如今,再战 WWDC 23 SSC 😋

阅读更多
Swift Charts 入门 —— 认识各种标记

Swift Charts 入门 —— 认识各种标记

最近在学习和使用 WWDC 22 上全新的 Swift Charts,

Swift Charts 使用 SwiftUI 的声明式语法,用于在 SwiftUI 中构建可视化图表,便于数据的可视化分析。

本期博客将专注于 Swift Charts 的标记和符号。

阅读更多
Magic Keyboard 使用体验

Magic Keyboard 使用体验

买了 Apple Magic Keyboard 已经一周多了,体验了苹果的「线上买,线下提」,

经过一番折腾,又体验了「14天无理由退货」,

来分享下我的使用感受和折腾过程。

阅读更多

搞笑体育 之 跑步是不可能跑步的

众所周知,高校体育就是一坨…

且不说功能如何,

你一个给大学生用的“运动”软件,

开屏一大堆广告,手机动一下就乱跳app,

跑个步还不忘给我打广告,从头打到尾,真牛…

傻*软件,吃像太难看!

跑个步还要打卡点位,真的恶心,但是,跑步是肯定不会跑的啦~

阅读更多

Selection Range in SwiftUI

在 SwiftUI 中,没有提供默认的 modifier 来监听 TextViewselectionRange

这对于文本编辑类 app 来说是很致命的,因为无法控制光标的位置,

但是可以从其他的文章中找到一些思路:

寻找 NSView / UIView 的方法来源于:siteline/SwiftUI-Introspect

本文来介绍一种解决方案,可以实现出以下的代码:

1
2
3
4
5
6
7
8
9
10
11
import SwiftUI

struct Example: View {
@State private var selectionRange = NSRange()
@State private var text = ""

var body: some View {
TextEditor(text: $text)
.selectionRange($selectionRange)
}
}
阅读更多

MarkdownView 从 0 到 1 —— 回顾整条时间线

熟悉我的朋友应该知道,我一直在开发一个框架,

用于在 SwiftUI 中以原生的方式来渲染 Markdown 文本。

P.S. 这篇文章也是在我做的编辑器中完成的。

早晨发布了 MarkdownView1.0.0-rc,也就是正式版的候选版本,

写这篇文章主要是想回顾和总结一路过来的技术点和一些解决方案。

阅读更多

理解函数中的泛型 & 泛型约束 —— 究竟谁才是入口?

继续接上篇,做完 AnyMyCollection 之后,

我又添加了一个扩展来修改 CustomCollection 在特定类型下的行为:

1
2
3
4
5
extension CustomCollection where Element == Int {
func allValues() -> [Element] {
[4, 5, 6]
}
}

ElementInt 时,不管三七二十一,直接返回 [4, 5, 6]

但是,运行是发现了这样的现象:

1
2
3
4
5
let collection = CustomCollection(1, 2, 3)
print(collection.allValues()) // [4, 5, 6]

let any = AnyMyCollection(collection)
print(any.allValues()) // [1, 2, 3]
阅读更多
Swift 中的类型擦除(下)—— 从模仿中学习

Swift 中的类型擦除(下)—— 从模仿中学习

上篇博客中,我们初步了解了为什么需要一个 Type Eraser ,

也分享了一个简单实现 Type Erasure 的方案。

为了更加深入了解类型擦除,我们还是得来看看 Swift 自带的一些 Type Eraser 是如何实现的。

目标是:理解一下其基本思路,并且仿制一个出来。

阅读更多
Swift 中的类型擦除(上)—— 为什么 & 怎么做