小白零基础不懂Swift?如何下手开源项目,ChatGPT帮你

452 阅读5分钟

I.前言

意图与目的

你有没有遇到这种场景,正在努力切图,需要复制多段的内容,然后把它们粘贴到你的项目中,但是没有一个顺手的剪贴板管理工具,所以感觉非常难受,嗷嗷叫?

作为一名 CV 实习生,我也遇到了这个问题。我尝试了很多常见的 Mac 剪贴板应用程序,但要么 UI 界面过于简陋(丑陋),要么太花哨。所以我一直在寻找一个符合我的使用习惯的剪贴板应用程序。

这天我又看到了一篇:

image.png

在里面我试了好几个应用,要不就是收费有限制,要不就是在打开时不会跟随屏幕(这个很重要,具体场景就是,我在开发时,使用了两个屏幕,但是唤起剪贴板时,一直固定在主屏幕,导致我的头一直需要转....)。

在试了前面几个之后,我看到了它!

image.png

简约但美观的界面,而且下载下来之后也发现剪贴板📋也能够跟随我的鼠标位置切换屏幕。

Apr-28-2023 11-43-07.gif

他直接通过快捷键快速选中1-10条剪贴记录,以及单击选中条数后按下Enter进行粘贴。但!!!我很快就发现了,他居然没有双击直接粘贴的功能!所以这就是标题以及本文的主要内容了,如何在0基础不懂Swift的情况下,给这个软件下一个双击触发复制的功能。

Yippy开源项目

github.com/mattDavo/Yi…

ChatGPT的角色

ChatGPT对我来说非常有用,尤其是当我不熟悉Swift语言或者需要修改Yippy项目代码时。我只需要简要描述我的问题或需求,ChatGPT就能够为我提供相应的解决方案。即使我对Swift语言不熟悉,ChatGPT也可以帮助我理解代码并提供代码修改的建议。

II.准备工作

了解Swift语言和基本语法

在我在下班⬅坐班车的时候,花了30分钟在掘金简单了解了一下Swift:

image.png

III.研究Yippy代码

了解项目的代码结构

直接问ChatGPT

image.png

大致可以猜到逻辑代码是在Windows目录下的 展开之后直接进行排除法,大致范围限定在Yippy这个目录下:

image.png

探索项目中的粘贴功能

关键词搜索

首先项目已经自带了按下Enter键进行粘贴(paste)行为。以我一个切图仔的思路,大胆猜测,肯定有一个处理粘贴逻辑的代码块,拥有着关键词key或者paste

直接搜索paste

image.png

看这函数命名以及调用,不用想了,相关的逻辑肯定在这个文件里面。 现在进入具体代码进行查看,有这样的一段代码:

image.png

阅读这段代码,大致理解了它是通过链式调用监听键盘行为,绑定相应的回调函数。然后,我发现enter实际上被命名为return,我就说之前我的搜索怎么一直没有成功....

IV. 实现双击粘贴功能

设计双击粘贴功能的实现方案

现在,我需要做的就是找到视图View以及逻辑Controller相互结合的代码块。

我分两次询问了GPT:

image.png

image.png

大概进行了一下我的理解: 要做到在View中,调用一个Controller的代码,需要通过一个YippyTableViewDelegate来进行中介转发: 在Controller中确实出现了很多Delegate的字眼,直接进入YippyTableViewDelegate文件进行查看,

image.png 可以了解到其实他已经定义过两个需要在View触发的Controller事件,因为Swift中函数调用时的参数需要写句听名称(速成中了解到的),那我直接搜索他定义的一个参数名selectedDidChange

image.png

看这结果,以及前面cahtGPT的举例,可以肯定,第一处在View层中触发事件,中间处类似于定义。最后处位于Controller,那肯定就是写触发具体执行的事件。

image.png

参照下面两处定义,补充上我们自己的定义:
参数类型个数不一样其实调用的函数也不一样。参考ts中学的。

image.png 再写第三处,在我的理解中应该类似于js中的this,指向当前实例化的类,那我直接就在这里调用了类中写好了的pasteSelected方法。

现在就差最后一步了:在View层中监听双击事件,并在其中调用Delegate定义的方法。

搜索发现,调用的逻辑只需要写这样的一段代码,然后删除后面两个参数,自然就会变成调用我们定义的那个函数。

image.png

最后一步要解决的,那就是如何监听View的双击事件:

image.png

因为第二种方法有点像js中的table.onclick=myOnClick(),最后也是使用它来进行触发。

image.png

image.png

调试和测试新功能的实现

哈哈哈,最后才是跑代码,过程需要使用Xcode扒拉扒拉的,值得一提的是,项目直接拉下来 居然跑不了...

差不多得有五六个报错,最后还是chatGPT帮我解决的。

image.png

演示

Apr-28-2023 14-09-18.gif

V. 结论

整个添加功能的过程大概花了两个多钟,然后花了一个钟去研究Xcode的打包。
诶,有人知道没开发者账号怎么打包之后给别的mac用吗
对于几百$的认证费用... 我总结以下六点......