SwfitUI 进阶 - View 与 NSView 互相转换

开发环境: macOS 10.15.5 Xcode 11.7 我其实挺喜欢 SwiftUI 的,首先 Swift 语言代码简练,SwfitUI 可以直接用代码进行布局且方便预览,很符合现代开发的习惯。而不是像 Objective-C 那样,语句繁复,还要用 Xib 这种可视化工具进行拖拽布局。 但不幸的是,由于 SwfitUI 是2019年才正式发布的,所以还有很多欠缺的功能,以及莫名其妙的 Bug。为了弥补这些不足,我们可以将成熟的 AppKit 中的各种 NSView 控件包装成 SwfitUI.Vie…

SwiftUI Bug - onHover() 导致内存泄漏(View 结构体实例不被释放)

环境: macOS 10.15.5 Xcode 11.7 现象: 如果对一个 View 视图使用了 onHover() 修饰器,那么会导致该视图,乃至包裹该视图的最外层视图都不会被释放。 这应该是 SwiftUI 的一个 Bug,但是什么时候才能被修复啊 =。=# SwiftUI 也太多 Bug 了。。。文档又差。 欸 示例代码: // // OnHoverLeak.swift // Countdown // // Created by funway on 2020/10/2. // Copyright ©…

SwiftUI 进阶 — 计时器 Timer 以及 如何在 View 中监听 NSWindow 事件

Base on macOS 10.15, Xcode 11.7. 一、计时器 Timer 与 TimerPublisher 1.1 Timer 与 TimerPublisher 的基本用法 如果我们想实现一个简单的程序用来显示当前系统时间,那么就必须得用到 Timer 计时器,来定时更新 View 中的 @State 属性。网上有很多关于 SwiftUI 计时器的用法介绍,但却都只说最最基础的用法,而忽略了可能存在的 Bug。下面我们来通过一个简单的例子来展示一下 Timer 与 TimerPublishe…

SQLite.swift 的类型扩展 — 存储 UUID 的二进制值

首先要知道 SQLite 只支持如下五种存储类型: 存储类 描述 NULL 值是一个 NULL 值。 INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 TEXT 值是一个文本字符串,使用数据库编码格式(默认为 UTF-8)存储。 BLOB 值是一个二进制数据,完全根据它的输入存储。 SQLite.swift 将这五种存储类型与 Swift 数据类型做了一一对应: Swift Type SQLit…

NSWindow 无标题栏窗口无法获得焦点与 resize 鼠标指示的解决办法

Base on macOS 10.15, Xcode 11.7. 在 macOS 程序中,对 NSWindow 实例可以通过删除 NSWindow.StyleMask.titled 属性来设置窗口为无标题栏窗口。 // 方法一:实例化时通过 styleMask 实参数组设置,不包括 .titled 即无标题栏 window = NSWindow( contentRect: NSRect(x: 0, y: 0, width: 480, height: 300), styleMask: [.resizable]…

Linux 三种设置环境变量的方法

一、命令前置的临时环境变量 网上一搜一大把都是说 export 命令与 .bash_profile 文件的,却鲜有人提及可以在命令行语句前设置临时环境变量,并且该变量只对当前语句有效。 # usage: var=value [var2=value2 ...] script var=value sh -c 'echo $var' # 打印 value echo $var # 打印 空行,因为上面的临时环境变量已经失效 var1=value1 var2=foo sh -c 'echo $var2' # 打印 f…

Carthage 依赖管理工具的使用

快速上手 1. 安装 carthage brew install carthage 2. 创建依赖文件 在项目根目录下创建 Cartfile 文件。在文件中写入依赖,比如: github "Alamofire/Alamofire" ~> 4.7.2 3. 下载并编译依赖库 在项目根目录下执行 carthage update 命令,Carthage 会根据 Cartfile 文件下载并编译依赖库。运行后生成 Cartfile.resolved 文件与 Carthage 目录。 # 使用 --cache-…

SwiftUI 入门

SwiftUI  的官方入门教程:Creating and Combining Views 不得不说我觉得这个教程看起来很好但是实际真不咋滴,只说怎么用,不说为什么这么用,根本不考虑初学者的感受。另外该教程应该是 WWDC 2019 发布的,基于 Xcode 11。而在最新发布的 Xcode 12 beta 版本中,似乎 SwiftUI 有了自己的生命周期,不再依赖于 UIKit。 1. 项目结构 1.1 iOS 项目初始结构 在 Xcode 11.5 中新建一个 "iOS" - "Single View …