Swift/SwiftUI
文章平均质量分 53
Swift/SwiftUI 相关内容的笔记、问题及其解决方案
zhonguncle
居高才能临下,深入才能浅出(这话是谁说的呢?肯定不是鲁迅)
展开
-
Swift如何使用Vision来识别获取图片中的文字(OCR),通过SwiftUI视图和终端命令行,以及一系列注意事项
首先简单介绍一下 Vision:Vision 是一个计算机视觉算法的架构,可以对图像和视频执行多种任务。支持 iOS 11/iPad OS 11/macOS 10.13/tvOS 11 或更新系统。支持 ISO 语言代码中的所有语言。需要注意由于汉字的复杂性,自定义单词(customWords)功能和语言矫正功能对于中文不可用。需要注意 Vision 是包含在这些系统中的,而不是程序里,所以编译出来的程序本身并不会很大,并且结果精度和系统版本挂钩,后续会有演示。原创 2023-09-12 02:26:22 · 2061 阅读 · 0 评论 -
Swift——如何将某一进制的数字按另一种进制输出(比如十进制输出打印成十六进制,八进制打印输出成二进制)
最近由于需要阅读比较老的文档,老文档里内存地址是用八进制而不是十六进制,所以需要写一个小工具,用来转换进制进制。虽然自带的计算器可以,但是数量一多比较麻烦。一开始我想费劲吧啦写十二个转换函数,虽然有些函数可以套,但是还是蛮费劲的。所以我就寻找了一下简单方法,结果发现。类型有个特别神奇的方法,希望能帮到有需要的人~原创 2023-06-12 05:43:08 · 652 阅读 · 0 评论 -
Swift——如何将数组映射成字典(关键字为数组元素,值为下标序号)
有时候需要将数组的下标和元素转换成字典。比如说使用数组元素来查找下标,如果使用一个函数来查找,那每次都得进行循环查找和获取,不论是计算性能还是内存需求都大,这时候将原数组转换成一个字典,关键字为数组元素,值为下标序号会更方便一些,这样就可以很轻松的通过元素的值来查找序号了,也就不用每次都进行循环查找。要将数组转换为字典需要依次获取数组每个元素和其对应的下标序号。当然用一个 For 循环也可以实现这个功能,因为下标序号是用 For 循环里的i通过i=0和i += 1获取到的。但是 Swift 并没有 C原创 2023-04-22 18:49:23 · 663 阅读 · 0 评论 -
Swift——如何测量一个函数/功能的运行时间
当需要测试程序的性能时,Xcode 自带的测试功能有时并不能满足我们的需要,这个时候就需要自己编写测试代码。测试性能主要是测试程序或代码运行时间,不论是测试 CPU/GPU 密集型程序,还是读写密集型程序,都需要获取程序或函数的运行时间来计算性能。如果是测试 CLI(Command Line Interface,命令行交互)程序,那么就可以在使用程序时,加上time命令,就可以获取整个程序的运行时间。但是如果想测试程序代码中的某一个函数运行时间,或者测试 GUI 程序的时候,这种方法就行不通了。原创 2023-04-02 21:49:33 · 824 阅读 · 0 评论 -
SwiftUI——如何使用新的NavigationStack和NavigationSplitView(如何页面跳转2.0以及如何制作侧栏)
从 iOS 16 开始,苹果开始弃用原先的,以后会逐渐完全淘汰掉。现在开始使用和。的效果和原本的一样,而则和现在 iPadOS 上的效果一样。最近在 iPadOS 上面使用,内容会放在侧栏,而不是像 iOS 或者以前一样。如下:苹果这次改名的目的应该是为了区别两种导航模式,怕开发者不好理解区分。那么下面来介绍一下二者。原创 2022-11-24 03:54:57 · 4742 阅读 · 0 评论 -
关于UIScreen.main.bounds.height的值发生了变化的原因和解决方案
SwiftUI——得到屏幕尺寸(bounds和nativeBounds)》,但是苹果最近做了修改,所以写这篇博客来作为补充和改进(原博客也进行了修改)。最近一个开源项目收到一个issue,说有个bug,我想不能够啊。一检查还真有一个bug,研究了一下发现是苹果改了`UIScreen.main.bounds.height`的值。但是苹果官方没有提到过这一点,还是说整个屏幕的边界。以 iPhone 11 Pro 为例,`UIScreen.main.bounds.height`的值从 1125pt 变成 812p原创 2022-11-07 04:18:21 · 1123 阅读 · 0 评论 -
Safari Extension 扩展插件中关于权限的二三事(例如设置权限、权限类型等)
Safari Extension 扩展插件的权限相关的内容大致分为下面几个方面:Safari Extension 扩展插件是要在用户控制下的,不能想干嘛就干嘛,因此扩展只有在用户进行互动之后才会运行。在第一次运行之前,扩展图表旁边会有一个提醒,点击会弹出一个标记来帮助指导用户使用。如下:激活后的扩展图标会变成蓝色的。Safari Extension 扩展插件的权限是可以针对不同网站来授予的,这样用户就可以自行决定在一些网站中才能使用扩展,或者在一些网站中不使用扩展。(开发者也可以针对不同的网站来设置权限原创 2022-10-25 19:12:06 · 1725 阅读 · 0 评论 -
SwiftUI——如何使用自带的原生图表(Charts)
在 WWDC2022 上,苹果为 SwiftUI 提供了图表相关的包Charts,这下就不用自己费劲实现图表功能了。代码量一下子从四五百行变成了十几行,甚至几行。如果是老系统的话还是得手写。自定义颜色,线图点图条形图,颜色,组合,自定义原创 2022-09-23 16:24:36 · 3758 阅读 · 0 评论 -
SwiftUI——界面间的“闪转腾挪”(页面跳转的各种方法)
这是一个方法,而不是苹果提供的。相比较前者稍微难一些,而且在数据传递的时候受限比较多,但是在界面比较多的某些时候就可能会比较好用。来指定需要跳转到的界面,也是最常见的方法。使用起来有两种方法,不过这两种方法都需要包裹在。这种方法使用场景就多了,比如说达到一定条件可以跳转到某个界面。语句来更改当前显示的View,被更改的则是之前新建结构体。让其不显示在界面中,但是可以被触发,有时候需要使用。然后列出三个界面的代码,这里需要在按钮上更改结构体。然后在Preview的结构体,或者。希望可以帮到有需要的人~....原创 2022-07-17 15:17:39 · 7081 阅读 · 2 评论 -
Swift——如何解析 URL
虽然 Swift 并不是一个常见的服务器后端使用语言,但是它也能解析 URL。为了以防万一,研究了一下还是假设被解析的 URL 为:。代码如下:输出如下:希望可以帮到有需要的人~原创 2022-07-08 06:35:44 · 1919 阅读 · 0 评论 -
SwiftUI——如何修改TabView的各种属性(包括tabItem的属性),例如颜色、位置、大小等
在SwiftUI中,我们可以很方便地实现标签页效果TabView,但是当我们需要修改他的一些属性的时候,却发现不能修改,例如我们想修改一个tabItem的颜色,使用.foregroundColor()发现没有变化。可能是SwiftUI还不够完善,所以这时候我们需要使用一下UIKit,如下:init() { //修改标签栏背景色 UITabBar.appearance().backgroundColor = UIColor(Color.pink)}...原创 2022-03-23 03:11:56 · 5223 阅读 · 0 评论 -
SwiftUI——延迟执行操作/定时自动执行操作(使用计时器Timer以及异步DispatchQueue.main.asyncAfter)
在开发软件的过程中,我们不仅需要用户点击的时候执行操作,有时候还需要定时自动进行一些操作。比如最常见的开屏广告倒计时关闭,还比如一些动画效果。实现这些一般有两种方法:一种是使用计时器Timer,一种是使用异步操作。计时器Timer的优势在于可以一直自动运行,直到销毁。缺点在于时间间隔是固定的,不好调整(理论上可以使用一个变量控制间隔,但是可能会比较麻烦)。异步操作的优势在于可以把握一个...原创 2022-03-14 16:15:34 · 9292 阅读 · 0 评论 -
SwiftUI——iOS15新版Animation制作动画介绍
从iOS 15.0开始,苹果废弃了之前的.animation(Animation?),建议开发者使用.animation(Animation?, value: Equatable)或者withAnimation替代。个人感觉改版之后虽然可能有些不习惯,但是开发的可能性和自由度更大了。但是在讲二者区别之前,我们需要了解一下UI动画。如果你了解这部分可以跳过。何为动画动画是由各种位移、颜色变化、大小变化等属性变化的过程。具体到SwiftUI的View,就是它们的.offset、.foregroundC原创 2022-02-17 22:38:23 · 3601 阅读 · 0 评论 -
SwiftUI——从Date类型获取各种数据(hour,minute等)
当我们获得用户在DatePicker中选取的时间之后,我们会获取一个Date类型的数据。但是需要以其他数据类型来使用这个数据。下面就来讲讲如何实现这一点。date数据类型没有相关的属性,就没办法很简单的通过.来得到我们想要的。但是苹果提供了一个函数供我们实现这一点,如下://这里表示获取“小时”的数据,hour的数据类型是Intlet hour = calendar.component(.hour, from: Date())//这里表示获取“分钟”的数据,minute的数据类型是Intlet m原创 2022-02-09 18:11:53 · 2218 阅读 · 0 评论 -
SwiftUI——推送通知(Notifications)二三事
有很多需要推送通知的情况,但是关于SwiftUI的通知推送说的人却不多,这里就说一些相关内容。一方面是为了自己能以后再查阅,另外一方面也是想能帮到有需要的人。本文将讲述:基础款推送(最常见的通知)定时型推送(例如闹铃,纪念日等)在讲述具体操作之前,需要注意一点:通知不能出现在app打开的时候。测试的时候使用模拟器或者实机测试,按完按钮要退出app一下。基础款推送首先来讲述一下最基础的推送,也是最常用的。样式如下:代码如下:import SwiftUIimport UserNotifi原创 2022-02-08 19:24:44 · 4570 阅读 · 1 评论 -
SwiftUI——使用VideoPlayer的时候,没有返回的叉叉,或者缺少其他功能
我在使用SwiftUI自带的VideoPlayer的时候,发现在iPod Touch中,有返回的叉叉,但是在其他设备,例如iPhone 13 mini上就没有。如下:这不是我想要的,查找半天之后都没找到解决办法。最后我发现可以很神奇的解决这一点。首先我是通过以下代码来调用VideoPlayerstruct TableCellView: View { @State private var playVideo: Bool = false var body: some View原创 2022-01-28 06:32:57 · 2560 阅读 · 0 评论 -
SwiftUI——如何使用iOS/iPadOS/macOS系统自带的文本转语音功能(TTS)来朗读文本
作为独立开发者,有些时候需要大量读音的时候,就可以使用一些语音合成技术,虽然讯飞、谷歌的语音合成技术似乎更好一点,但是需要联网从云端获取,这有时候会影响软件的效率和成本。好在iOS自带语音合成技术,支持的语言包括各个地区口音的英语、中文(普通话)、日语、法语等。在SwiftUI中使用非常滴方便,如下(我这是为了演示,用的时候可以写一个函数,别像我这么写):import SwiftUIimport AVFoundationstruct ContentView: View { var body原创 2022-01-22 08:53:37 · 1989 阅读 · 0 评论 -
SwiftUI——获取网站api中的JSON,并且显示其中的文本
这是开发中非常常见的使用场景。首先,我们需要知道要获取的json是什么样的,有两种方式得知:第一,查询API文档:一般在网站API文档中会介绍,如下:第二种,通过使用crul -H获取:这种方法需要使用到终端,上图也介绍了这个方式,如下:$ curl -H "Accept: application/json" https://icanhazdadjoke.com/{ "id": "R7UfaahVfFd", "joke": "My dog used to chase people o原创 2022-02-11 00:23:30 · 2497 阅读 · 0 评论 -
SwiftUI——如何获取View视图的尺寸
我们可能在一些情况下需要获取SwiftUI的一个View的尺寸,我们可以用以下方法获取:.overlay(GeometryReader { geo -> AnyView in DispatchQueue.main.async{ self.displayWidth = geo.size.width self.displayHeight = geo.size.heigh原创 2022-01-20 08:40:22 · 4678 阅读 · 0 评论 -
SwiftUI——如何调整SF符号大小
苹果为开发者提供了很多图标,提高了开发者的效率,也统一了很多符号的用途,以免造成误解。这些图标被称为SF符号,苹果提供了一个软件来供开发者查找这些符号,名为SF符号(SF Symbol),在开发者官网可以找到,如下:这个符号通过以下方式使用: Image(systemName: "名称")名称可以右键SF符号里的图标,点击“拷贝1个名称”,如下:但是这样使用会发现尺寸很小,并且无法通过调整frame来改变大小。这里需要使用如下来调整大小:Image(systemName: "flashlig原创 2022-01-11 04:51:27 · 2339 阅读 · 1 评论 -
SwiftUI———如何使用Core Image官方滤镜(CIFilter)来处理照片
苹果在Core Image API中提供了14个大类、共174个图像处理方式以及一些常见滤镜,其中一些滤镜还能处理视频甚至是实时视频,首先是如何看这个网页,也就是说这个网页提供了哪些信息,这对我们使用时非常有帮助的。以下面这个截图为例,来讲一下如何看。原创 2021-12-10 18:17:15 · 4961 阅读 · 0 评论 -
SwiftUI——如何调用相机
SwiftUI无法直接调用相机和相册,需要和UIKit一起然后和调用相册一样,我们创建一个ImagePicker结构体供我们获取系统相册内容(所以如果我们需要在一个软件里调用相册和相机的话,就只用创建一个`ImagePacker`结构体即可)原创 2021-12-10 17:22:44 · 4315 阅读 · 1 评论 -
SwiftUI——如何获取系统相册的照片
SwiftUI没办法自己获取系统相册内容,所以得依靠一下UIKit首先我们创建一个ImagePicker结构体供我们获取首先我们创建一个ImagePicker结构体供我们获取系统相册内容:struct ImagePicker: UIViewControllerRepresentable { @Environment(\.presentationMode) private var presentationMode let sourceType: UIImagePick原创 2021-12-10 17:12:29 · 1884 阅读 · 0 评论 -
SwiftUI——横向滑动浏览选择
有时候需要横向滑动来让用户选择内容,这样节约空间。SwiftUI做到这点可以说是非常简单了。在ScrollView后面加个括号里写上.horizontal,如下(由于字符集问题,这里的????️显示不对,演示里是对的):struct ShowView: View { var body: some View { ScrollView(.horizontal, showsIndicators: true) { HStack{ T原创 2021-09-01 17:34:52 · 1917 阅读 · 0 评论 -
Swift——如何查看Xcode使用的swift版本
在Mac终端中输入:swift -version可以看到使用版本和对应的内核Apple Swift version 5.4.2 (swiftlang-1205.0.28.2 clang-1205.0.19.57)Target: x86_64-apple-darwin20.5.0原创 2021-08-07 10:08:32 · 3670 阅读 · 0 评论 -
SwiftUI——从一句话中截取前几个单词的长度
由于一些原因需要截取前7个英文单词。但是由于swift没有相关函数,所以就自己写了一个。思路是这样:首先怎么判断这是一个单词?单词大多是由空格结尾的。但是也有以特定符号结尾的。比如说我们要从"Hello, World!"提取第一个单词,但是第一个是由,结尾的,这就有点难搞了。所以我们知道单词是以空格等符号结尾的一个字符串。其次就是怎么判断有几个单词?这个很简单,定义一个变量,在循环的时候如果有了一个单词就自动加一。.........原创 2021-08-07 10:03:11 · 348 阅读 · 0 评论 -
SwiftUI——Core Data数据库的使用(在纯SwiftUI生命周期中)
Core Data数据库在SwiftUI中使用起来不难,不过很多文章写的都是Swift中的使用方法,很少有纯SwiftUI的Core Data数据库的使用方法。我就想着自己来整理一下,写出来,如果有错误,欢迎指正~开始前的准备如果是新建项目的话,创建项目的时候选择上“Use Core Data”然后点击Next进入项目。把ContentView.swift文件中苹果预设的代码删光,改成以下代码:struct ContentView: View { //我们可以要求它提供当前托管对象内容,并将原创 2021-07-07 15:33:01 · 4438 阅读 · 0 评论 -
SwiftUI——消失当前界面/View(dismiss View)
让界面消失的方法原创 2021-07-07 13:29:36 · 3137 阅读 · 0 评论 -
SwiftUI——控制音频文件(播放和暂停)
在SwiftUI中,播放音频是不难的。文章开头逐步介绍,最后是完整代码以及改成带接口便于使用的函数。我们将事先准备好的音频文件拖入项目左侧栏中。方便管理起见,可以建一个Group,如下:首先我们需要在开头导入AVFoundation库:import AVFoundation接下来我们需要定义一个“播放器”——AVAudioPlayer,用于播放我们准备好的音频文件:var audioPlayer: AVAudioPlayer?接下来我们需要在定义一下需要播放的音频文件的路径。forRes原创 2021-06-26 21:05:20 · 2563 阅读 · 0 评论 -
SwiftUI——图片(Image类型)转base64字符串(String类型)和base64字符串转图片
完整代码和注释讲解都有哦,希望能帮到有缘人~import SwiftUI//将图片转表示base64值的字符串func imageToBase64(image: UIImage) -> String { //将获取的图片通过jpegData(compressionQuality: 1.0)方法转成Data类型的数据。 //参数1.0表示不压缩,因为jpeg是有损格式,jpg和jpeg都用这个方法。无损格式PNG使用pngData()方法转换,没有参数,也就是不压缩。 l原创 2021-06-02 23:12:58 · 2044 阅读 · 2 评论 -
SwiftUI——Localization(本地化/多语言适配)
其实文本/字符串的本地化在Xcode12用SwiftUI非常非常简单,不需要东扯西扯的。这里讲的详细一些,希望可以帮到和我一样苦苦寻找简单方法的人。如果只需要步骤,只要看粗体就可以了。事先说明一下,开发环境使用的是英文(en),所以开发的语言是英语。(后面会提到哦)**首先,如图所示在Info里添加上简体中文(zh-Hans)和日语(ja)。**这样告诉Xcode我们支持哪些语言。日语在这里是为了展示多种语言场景,毕竟有时候我们不止需要翻译一种语言。...原创 2021-06-01 10:38:20 · 4600 阅读 · 0 评论 -
SwiftUI——截取String(字符串)
有时候需要截取获得的字符串,不然不方便使用。以截取效果来看,截取字符串有两种:单方向截取和中间截取。先定义一个字符串,以便后续操作和演示。let str = "Hello! World"这里需要注意的是,感叹号后面是有空格的,空格也算一位字符。单方向截取这种方式只能从两端中的某一端开始截取,细分的话可以分为从特定下标开始截取和从特定字符开始截取:“从特定下标开始截取”适合处理格式固定但内容不固定的字符串,方法如下(注释为输出的结果)://从字符串开头数6个字符,截取这6个字符——截取前六个原创 2021-05-27 01:54:27 · 2821 阅读 · 0 评论 -
SwiftUI——提供多种小组件(Widget)供用户选择
有时候app需要提供多种widget供用户选择/使用,那么可以使用以下方法,不过需要事先声明,每个app最多可以包含5种小组件(Widget):首先做几个小组件://省略之前的Provider和SimpleEntey部分//第一个小组件struct WidgetOne: Widget { let kind: String = "WidgetOne" var body: some WidgetConfiguration { IntentConfiguration(ki原创 2021-05-24 05:13:01 · 1439 阅读 · 0 评论 -
SwiftUI——获取日期时间(含农历)及处理时间格式的方法
有时候开发需要使用系统日期和时间,以下就是几种可以调用系统时间的办法。如果只是单纯需要显示时间,不需要处理时间信息,那么可以很简单的使用以下代码:Text("\(Date())")这时候会显示非常详细的时间:如果只是需要显示其中一部分的话可以使用以下方法:Text(Date(), style: .date)这时候显示如下:这里的.date还可以改成.time来显示具体时间。当然还有timer(计时器)等组件,可以自己看看哦。如果需要显示当前时区可以使用:Text("\(NSTime原创 2021-05-19 22:29:25 · 4876 阅读 · 0 评论 -
SwiftUI——如何随机不重复地输出一个数组
做app或者项目的时候有时候需要随机输出一个数组,我们可以将当前数组打乱,赋值给一个空数组,然后将该数组依次输出,来实现同样的效果。我自己写了个Demo,各位可以参考一下:https://github.com/ZhongUncle/CSDN-Demo...原创 2021-04-23 19:48:58 · 320 阅读 · 0 评论 -
SwiftUI——Widget extension(intent)默认代码注释讲解
import WidgetKitimport SwiftUIimport Intents//数据结构struct SimpleEntry: TimelineEntry { let date: Date//这里需要注意,ConfigurationIntent是预先设定好的,代码如下:// public class ConfigurationIntent: INIntent {//// } let configuration: ConfigurationIntent原创 2021-04-08 18:49:46 · 1048 阅读 · 0 评论 -
SwiftUI——UIDevice的一些属性(设备系统名称以及电池电量)
UIDevice是获取设备信息的一个API。要添加.current,具体使用方法如下:let name = UIDevice.current.name这样显示的是设备名称(通用-关于本机-名称),例如xxx的iPhone。它有一些属性是可以直接使用的:.name:获得的是设备名称(通用-关于本机-名称),例如:xxx的iPhone。.model:获得设备具体型号,例如:iPhone 11 Pro。.localizedModel:和.model输出结果一样,不过会变成本地化.原创 2021-04-03 13:36:28 · 1833 阅读 · 0 评论 -
SwiftUI——将数组(Array)作为函数参数
直接使用Array或者[String]是不能设置数组为函数参数的,要加上inout,如下: func action(arr: inout [String]) { arr.append(test[eleNum]) }原创 2021-03-25 18:27:04 · 730 阅读 · 0 评论 -
SwiftUI——自定义颜色(UIColor和Color Set包括dark model黑暗模式)
SwiftUI里自定义一些属性的颜色时(例如背景),可以使用:struct secondThinkView: View { let brightRed = UIColor(displayP3Red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) var body: some View { VStack{ Spacer() Button(action: do) {原创 2021-03-14 06:07:44 · 6555 阅读 · 0 评论 -
SwiftUI——生成随机数
var currentDisplay = Int.random(in: 0...2)就表示定义一个变量currentDisplay,整数类型,范围0到2随机。“...”表示闭区间。“..<”表示左闭右开的区间,也只能表示这种开区间。“<.<”“<..”不可以。...原创 2021-02-07 16:00:28 · 763 阅读 · 0 评论
分享