Xcode 超简单实用小秘技让撸码进入新境界

news2024/11/24 13:57:02

在这里插入图片描述

概览

Xcode 是开发  应用不可或缺的王牌主力军,虽然 Xcode 中一些常用使用姿势想必大家都已驾轻就熟,但其中仍有一些隐藏宝藏小技巧不为人知。

充分挖掘它们可以极大加速和方便秃头码农们日常的撸码行为。

一般的,它们分为两类:方便代码开发和加速源代码编辑

在本篇博文中,就让我们分别来选取一些为大家介绍吧:

  • 概览
  • 代码片段(code snippet)快速插入
  • 定制代码片段
  • “并发重构”:同时修改多处源代码
  • 总结

在这里插入图片描述

本文所有实例都在 Xcode 15.0 中操作演示。

Let‘s go!!!😉


代码片段(code snippet)快速插入

在 Xcode 中,对于一些常用代码片段,每次重复输入会非常繁琐,比如下面这段:

struct Foo {
    private var _value = 0
    var value: Int {
        get {
            _value
        }
        set {
            _value = newValue
        }
    }
}

以上,我们围绕 _value 为 Foo 创建了一个 value 计算属性。其中,我们分别设置了它的 get set 读写器。在包含大量计算属性的结构或类中,每次都手动创建非常麻烦。

别急,Xcode 非常人性化的为我们提供了代码片段快捷命令,只需敲入 vargetset 然后补全代码即可:

在这里插入图片描述

所有常用代码片段快捷命令一览,可以按下 Shift + Command + L 键呼出:

在这里插入图片描述

值得注意的是,只有在正确上下文中代码片段快捷命令才会被识别,比如下面的 docatch 快捷命令在错误语境中无法被触发,这进一步降低了犯错的可能:

在这里插入图片描述

使用 Xcode 现成代码片段快捷命令没什么了不起的,更厉害的是我们可以恣意定义自己的代码片段快捷命令。

定制代码片段

资深秃头码农们经过多年耕耘,时常会总结出一些精华代码小段。为了避免它们成为沧海遗珠,我们可以在 Xcode 中将其制成代码片段并赋予特定的快捷命令。

比如,我们写了一个供快速测试用的结构 Test,为了能在所有项目中使用它,我们可以将其制作为代码片段。

struct Test: Identifiable, CustomStringConvertible {
    var name: String
    var id: String {
        name
    }
    
    var timestamp: Date?
    
    var description: String {
        "\(name) @ \(timestamp ?? Date.distantPast)"
    }
}

在 Xcode 编辑器中全选上面 Test 结构的代码,然后在鼠标右键点击弹出的菜单中选择 Create Code Snippet…

在这里插入图片描述

在新建代码片段窗口中补全相关信息,尤其是其中的 Completion 内容,它就是自定义代码片段对应的快捷(补全)命令:

在这里插入图片描述

现在,快速测试时我们可以极速创建 Test 测试结构定义:

在这里插入图片描述

自定义代码片段快捷命令在分步骤演示开发流程时也十分有用,我们可以循序渐进的设置好若干快捷命令,随后依次递进展示给小码农们看:

在这里插入图片描述

我们还可以非常方便的编辑已保存的代码片段,操作非常简单,小伙伴们可以自行尝试。

“并发重构”:同时修改多处源代码

上面我们介绍了使用代码片段快捷命令简化开发的方法,下面让我们从另一个角度来聊聊如何为源代码编辑加速助力。

在使用 Xcode 日常开发中,重构绝对是重度操作。

比如,如果我们要将下面 SwiftUI 代码中所有 Text 字体样式从 .title 改为 .headline 并做字体加粗该如何操作呢?

struct TestView: View {
    var body: some View {
        VStack {
            Text("大熊猫侯佩 @ csdn!")
                .font(.title)
            
            HStack {
                Text("大熊猫侯佩 @ csdn!")
                    .font(.title)
            }
            
            HStack {
                VStack {
                    Text("大熊猫侯佩 @ csdn!")
                        .font(.title)
                    Text("大熊猫侯佩 @ csdn!")
                        .font(.title)
                }
            }
        }
    }
}

可能小伙伴们脑海中涌现的第一个念头是全局替换,不过全局替换无法提供自动代码补全而且很容易替换出错。

Xcode 编辑器包含了一个很好的解决方案,我称之为“并发重构”,它可以同时多选和修改指定内容。我们只需选中所有需要重构的内容,然后做出改变即可,改变会同时发生而且代码补全会保证多处更改不会出错。

具体操作为:

  1. Command + F 呼出搜索框
  2. 填入想要修改的内容
  3. Option + Command + G(或 Shift + Option + Command + G 逆序选中)依次选中每处需要重构的内容
  4. 直接更改即可

在这里插入图片描述

或者,我们还可以用更简单的步骤:

  1. 在编辑器中选中需要修改的内容
  2. Command + E 将其加入搜索(搜索框并不会弹出)
  3. Option + Command + G(或 Shift + Option + Command + G 逆序选中)依次选中每处需要更改的内容
  4. 直接更改即可

这种方法不需要呼出搜索框即可并行修改,更加便捷:

在这里插入图片描述

对于一些在可视范围内相同内容同时重构的场合,使用“并发重构”不会出错并且带自动补全,妥妥的奇门遁甲 + 神兵利器!棒棒哒!!!💯🚀

总结

在本篇博文中,我们介绍了两个非常简单、但却会让 Xcode 使用进入一个新境界的操作秘技,相信大家会喜欢上它们。

感谢观赏,再会!😎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人制作开源方案 | 四轴飞行器

1. 概述 基于探索者搭建的模块化四轴飞行器研究平台,采用独特的设计方式,可实现在室内完成对四轴飞行器、无人机等运动控制的原理研究,以及学习飞行控制的原理知识。 2. 组装 请按照下图进行机架的组装。 整体图 请解压文末资料中的 /软件/Mi…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(一)

思维导图 学习目标 变量声明 一、Web API 基本认知 作用和分类 什么是DOM DOM树 DOM对象 二、获取DOM对象 三、操作元素内容 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compa…

基于Java的实验室预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【数据结构】选择排序 堆排序(二)

目录 一&#xff0c;选择排序 1&#xff0c;基本思想 2&#xff0c; 基本思路 3&#xff0c;思路实现 二&#xff0c;堆排序 1&#xff0c;直接选择排序的特性总结&#xff1a; 2&#xff0c;思路实现 3&#xff0c;源代码 最后祝大家国庆快乐&#xff01; 一&#xf…

设计模式8、装饰者模式 Decorator

解释说明&#xff1a;动态地给一个对象增加一些额外的职责。就扩展功能而言&#xff0c;装饰模式提供了一种比使用子类更加灵活的替代方案 抽象构件&#xff08;Component&#xff09;&#xff1a;定义一个抽象接口以规范准备收附加责任的对象 具体构件&#xff08;ConcreteCom…

10OpenMP

OpenMP概述 通过线程实现并行化&#xff0c;与Pthread一样&#xff0c;是基于线程的共享内存库 与Pthread的不同 简而言之&#xff1a; Pthread更加底层&#xff0c;需要用户自己定义每一个线程的行为&#xff0c;OpenMP虽然更加简单&#xff0c;但是底层的线程交互实现很难 …

【单片机】13-实时时钟DS1302

1.RTC的简介 1.什么是实时时钟&#xff08;RTC&#xff09; &#xff08;rtc for real time clock) &#xff08;1&#xff09;时间点和时间段的概念区分 &#xff08;2&#xff09;单片机为什么需要时间点【一定的时间点干什么事情】 &#xff08;3&#xff09;RTC如何存在于…

【Git】Git 原理和使用

Git 一、Git 本地仓库1. 本地仓库的创建2. 配置 Git3. 工作区、暂存区、版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退8. 撤销修改9. 删除文件 二、分支管理1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略8. bug 分支9. 强制…

基于Java的厨艺交流平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

JavaScript Web APIs第三天笔记

Web APIs - 第3天 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&#xff0c;结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事件委托的实现原理 事件流 事件流是对事件执行过程的描述&#xff0c;了解事件的执行过程有助于加深对事件的理解&…

数据结构刷题(三十三):完全背包最小值情况。322. 零钱兑换、279. 完全平方数

题目一&#xff1a; 322. 零钱兑换https://leetcode.cn/problems/coin-change/ 思路&#xff1a;完全背包问题&#xff0c;求解最小组合数。dp[j]&#xff1a;凑足总额为j所需钱币的最少个数为dp[j]。同时需要确保凑足总金额为0所需钱币的个数一定是0&#xff0c;那么dp[0] 0…

如果只是用php纯做api的话,给移动端做数据接口,是否需要用php框架?

API接口对接是现代软件开发中不可或缺的一部分&#xff0c;它允许不同的应用程序之间进行数据交换和服务调用。在PHP中&#xff0c;可以使用多种方式实现API接口的对接&#xff0c;包括基于HTTP协议的传统方法以及现代的API客户端库客户端库客户端库等。 一、实现API接口的对接…

Web开发-登录页面设计流程

目录 确定页面设计样式创建js文件jquery.min.jsbootstrap.min.js 创建css文件bootstrap.min.cssmaterialdesignicons.min.cssstyle.min.css 创建ftl文件header.ftlfooter.ftllogin.ftlcss部分html部分 确定页面设计样式 可以自己用“画图”等软件进行设计&#xff0c;也可以打…

步进电机只响不转

我出现问题的原因是相位线接错。 我使用的滑台上示17H的步进电机&#xff0c;之前用的是57的步进电机。 57步进电机的相位线是A黑、A-绿、B红、B-蓝。 17步进电机的相位线是A红、A-绿、B黑、B-蓝。 这两天被一个问题困扰了好久&#xff0c;在调试步进电机开发板的时候电机发生…

ubuntu安装ROS

进官网&#xff0c;选版本&#xff0c;操作系统 ROS: Home 开始安装&#xff1a; noetic/Installation/Ubuntu - ROS Wiki Installation Configure your Ubuntu repositories Configure your Ubuntu repositories to allow "restricted," "universe,"…

银行金融科技岗笔试题资料大总结

程序员进银行科技岗——简单总结_银行程序员 无水印&#xff0c;可直接打印使用。 中国银行 通用资料 视频资料

IPV6(IPV6,RIPng的配置以及手工配置IPV4隧道)

目录 实验一&#xff1a;IPv6的基本配置 实验二&#xff1a;RIPng基本配置 RIPng RIPng的工作机制 实验三&#xff1a;手工配置IPV4隧道 实验一&#xff1a;IPv6的基本配置 案例如下&#xff1a; 各部分配置如下 配置路由器RTA <Huawei>sys Enter system view, …

【论文笔记】DiffusionTrack: Diffusion Model For Multi-Object Tracking

原文链接&#xff1a;https://arxiv.org/abs/2308.09905 1. 引言 多目标跟踪通常分为两阶段的检测后跟踪&#xff08;TBD&#xff09;和一阶段的联合检测跟踪&#xff08;JDT&#xff09;。TBD对单帧进行目标检测后&#xff0c;使用跟踪器跨帧关联相同物体。使用的跟踪器包括使…

【STM32基础 CubeMX】外部中断

文章目录 前言一、中断是什么二、使用CubeMX配置你的第一个中断三、代码分析CubeMX四、中断函数按键中断点灯示例代码总结 前言 当涉及到STM32基础的外部中断时&#xff0c;我们进入了一个引人入胜的领域&#xff0c;它允许微控制器与外部世界进行互动并实时响应各种事件。外部…

【论文阅读】通过3D和2D网络的交叉示教实现稀疏标注的3D医学图像分割(CVPR2023)

目录 前言方法标注3D-2D Cross Teaching伪标签选择Hard-Soft Confidence Threshold Consistent Prediction Fusion 结论 论文&#xff1a;3D Medical Image Segmentation with Sparse Annotation via Cross-Teaching between 3D and 2D Networks 代码&#xff1a;https://githu…