首页 > 其他分享 >swiftUI-extension的使用

swiftUI-extension的使用

时间:2024-08-25 09:05:02浏览次数:8  
标签:return String extension self 添加 let 使用 swiftUI

在 Swift 中,extension 关键字用于为现有的类、结构体、枚举或协议添加新的功能,而无需修改原始源代码。扩展可以添加新的方法、计算属性、初始化器、下标、嵌套类型和遵循协议等。

以下是一些常见的 extension 用法示例:

为类添加方法

extension String {
    func reversedString() -> String {
        return String(self.reversed())
    }
}

let original = "Hello"
let reversed = original.reversedString() // "olleH"

为结构体添加计算属性

struct Point {
    var x: Double
    var y: Double
}

extension Point {
    var magnitude: Double {
        return (x * x + y * y).squareRoot()
    }
}

let point = Point(x: 3, y: 4)
let magnitude = point.magnitude // 5.0

为枚举添加初始化器

enum Direction {
    case north, south, east, west
}

extension Direction {
    init?(abbreviation: String) {
        switch abbreviation.lowercased() {
        case "n": self = .north
        case "s": self = .south
        case "e": self = .east
        case "w": self = .west
        default: return nil
        }
    }
}

let direction = Direction(abbreviation: "n") // .north

为协议添加默认实现

protocol Greetable {
    func greet()
}

extension Greetable {
    func greet() {
        print("Hello!")
    }
}

struct Person: Greetable {}

let person = Person()
person.greet() // "Hello!"

为类添加协议遵循

protocol Describable {
    var description: String { get }
}

extension Int: Describable {
    var description: String {
        return "The number is \(self)"
    }
}

let number = 42
print(number.description) // "The number is 42"

为泛型类型添加扩展

extension Array where Element: Equatable {
    func containsDuplicates() -> Bool {
        for (index, element) in self.enumerated() {
            if self[index + 1...].contains(element) {
                return true
            }
        }
        return false
    }
}

let array = [1, 2, 3, 1]
let hasDuplicates = array.containsDuplicates() // true

通过使用 extension,你可以为现有类型添加新的功能,而无需继承或修改原始类型。这使得代码更加模块化和易于维护。

标签:return,String,extension,self,添加,let,使用,swiftUI
From: https://www.cnblogs.com/Aliancn/p/18378651

相关文章

  • swiftUI-@Bindable和@Binging的作用
    在SwiftUI中,@Bindable和@Binding是用于管理和传递数据的属性包装器。它们在SwiftUI的数据流和状态管理中起着重要作用。@Binding@Binding是一个属性包装器,用于在父视图和子视图之间共享数据。它允许子视图读取和写入父视图的状态,而不需要直接持有该状态的所有权。@Bindi......
  • 2024玩儿转TikTok之环境介绍及独立使用住宅ip搭建,最便宜的网络,20元/月,刚刚更新最新教
    郑重申明:本文章只对合法合理做tiktok视频运营的用户做学习交流使用,有其他使用不当的违规违法行为后果自负!网络的环境测试,必须是独立住宅ip,网络环境优良,tiktok发布作品才能有流量1、选择服务器我选择的服务器:https://ipraft.com/?i71b7cf​​​然后下载FinalShell连接......
  • 使用IDEA反编译.class文件
    反编译.class文件是字节码文件,人看不懂,我们要使用IDEA反编译.class文件在项目结构中找到项目输出路径复制后在文件资源管理器中打开结构与项目结构一致,一直向下找到某一个包的.class文件打开后发现是乱码打开项目所在的文件夹,在文件资源管理器中把.class文件复制......
  • 8.23 PTA实验5-8 使用函数求圆台体积
    实验5-8使用函数求圆台体积本题要求实现函数求圆台体积,定义并调用函数volume_tc(r_lower,r_upper,h)计算下底半径为r_lower、上底半径为r_upper、高度为h的圆台的体积,函数类型是double。函数接口定义:doublevolume_tc(doubler_lower,doubler_upper,doubleh);其中r_......
  • 深度解析:为何顶尖SEO专家偏爱使用代理技术?
    在当今这个数字化时代,搜索引擎优化(SEO)已成为企业和电商从业者在网站获取自然流量、提升品牌知名度和促进业务增长的关键策略之一。然而,随着搜索引擎算法的不断升级和市场竞争的日益激烈,传统的SEO手段已难以满足现代改善SEO需求。在此背景下,利用代理技术优化网站排名成为了一种......
  • R 语言学习教程,从入门到精通,R MySQL 连接使用(21)
    1、RMySQL连接MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。R语言读写MySQL文件需要安装扩展包,我们可以在R到控制台输入以下命令来安装:install.packages("......
  • Tushare金融数据接口使用介绍【学生可以免费获取高级数据接口哦】
    Tushare是一个面向数据分析师和量化投资者的免费、开源Python财经数据接口包,它提供了丰富的中国股市历史数据和实时数据,包括股票、基金、期货、指数和行业数据等。用户可以通过Tushare获取股票交易数据、实时数据以及公司基本信息等。Tushare的使用相对简单,首先需要在Tushare官......
  • 使用 LangGraph 构建工作流, 实现与虚拟女友对话
    文章目录简介背景流程图代码实现简介介绍了如何使用LangGraph搭建一个基于聊天机器人的工作流,具体实现了一个虚拟女友的角色扮演游戏。通过流程图展示了构建完成的状态图,并介绍了各个节点的功能,如接收用户输入、生成对话等。提供了是否使用历史聊天记录的方法,让......
  • MSI Afterburner 使用
    MSIAfterburner是一款显卡超频软件。与其捆绑安装的RivaTunerStatisticsServer(RTSS)可以用来监测硬件运行情况(CPU温度、GPU温度、帧率、帧响应时间等)。首先安装MSIAfterburner。在ChooseComponents处记得选中RivaTunerStatisticsServer。打开MSIAfterbu......
  • apr库编译及队列使用笔记
    操作系统:CentOS7.9_x64apr库版本:apr-1.7.4&apr-util-1.6.3gcc版本:4.8.5队列功能在C++或Python等脚本语言里面,是很容易就可以使用的,但C语言里面,标准库里面没有。在使用C语言开发新应用时,就会遇到这个问题。阅读FreeSWITCH源码,发现使用的是apr库,一个强大的开发库,提供了一套......