Swift - static和class的使用
Swift中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是static和class。这两个关键字确实都表达了这个意思,但是在其他一些语言,包括Objective-C中,我们并不会特别地区分类变量/类方法和静态变量/静态函数。但是在Swift中,这两个关键字却是不能用混的。
static关键字
在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括在enum和struct中表述类型方法和类型属性时。在这两个值类型中,我们可以在类型范围内声明并使用存储属性,计算属性和方法。static适用的场景有这些
struct Point {let x: Doublelet y: Double// 存储属性static let zero = Point(x: 0, y: 0)// 计算属性static var ones: [Point] {return [Point(x: 1, y: 1),Point(x: -1, y: 1),Point(x: 1, y: -1),Point(x: -1, y: -1)]}// 类型方法static func add(p1: Point, p2: Point) -> Point {return Point(x: p1.x + p2.x, y: p1.y + p2.y)} }
enum的情况与这个十分类似,就不再列举了
class关键字
class关键字相比起来就明白许多,是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。要特别注意class中现在是不能出现存储类属性的,我们如果写类似这样的代码的话:
class MyClass {class var bar: Bar? }
编译时会得到一个错误:
class variables not yet supported
这主要是因为在Objective-C中就没有类变量这个概念,为了运行时的统一和兼容,暂时不太方便添加这个特性。Apple表示今后将会考虑在某个升级版本中实装class类型的类存储变量,现在的话,我们只能在class中用class关键字声明方法和计算属性。
static和class总结
类可以使用关键字static class 修饰方法,但是结构体、枚举只能使用关键字static修饰
// 定义类 class StudentC{static var des:String = "学生的类"var name:String!func getName()->String{return name}class func describe()->String{return des}static func getClassDescribe()->String{return des} }// 定义结构体 struct StudentS{static var des:String = "学生的结构体"var name:Stringstatic func describe()->String{return "这是一个定义学生的类"} }
有一个比较特殊的是protocol。在Swift中class、struct和enum都是可以实现protocol的。那么如果我们想在protocol里定义一个类型域上的方法或者计算属性的话,应该用哪个关键字呢?答案是使用class进行定义,但是在实现时还是按照上面的规则:在class里使用class关键字,而在struct或enum中仍然使用static——虽然在protocol中定义时使用的是class:
protocol MyProtocol {class func foo() -> String } struct MyStruct: MyProtocol {static func foo() -> String {return "MyStruct"} } enum MyEnum: MyProtocol {static func foo() -> String {return "MyEnum"} } class MyClass: MyProtocol {class func foo() -> String {return "MyClass"} }
转载于:https://www.cnblogs.com/junhuawang/p/6247991.html
Swift - static和class的使用相关推荐
- Swift类与OC类方法相互调用的
2019独角兽企业重金招聘Python工程师标准>>> 收集整理,希望对大家有帮助 1.OC调用Swift实例方法 例如在ViewController.m类里调用Swift的logM ...
- 从Java/Android到Swift iOS开发:语言与框架对比
今天分享的主题是Java/Android开发人员如何快速上手Swift iOS开发.主要内容如下: WhyFrom Java/Android to Swift Swift语言为什么值得学习? Java ...
- Cocoapods:podspec与使用过程中遇到的问题
Cocoapods:podspec与问题 在实际使用中,遇到一些疑问,记录下来 use_frameworks! 为啥要在CocoaPods中使用 use_frameworks!,参考: Why do ...
- iOS开发中自带的图标库
iOS 开发中苹果自带的图标库,uiimage可直接调用 @available(iOS 13.0, *) @objc public extension UIImage{ /// square.and. ...
- Swift类属性 static
2019独角兽企业重金招聘Python工程师标准>>> 使用 static 关键字进行属性的定义 调用时直接用 类名进行调用 class ClassRoom{ static var ...
- swift文件服务器,Swift3一行代码将各种类型文件上传到服务器
由于之前一直在忙项目,很久没有写过一篇像样的文章了,现在手上的项目基本是完成了,正好工作时间偷个懒写两篇文章. 将相机或相册图片上传到服务器 先看看最常见的图片上传,也可以选择跳过,后面有直接的封装方 ...
- swift中单例的创建及销毁
最近项目重构时使用了oc和swift的混编,遇到了关于单例的创建及销毁,这里记录一下 //创建单例private static var _sharedInstance: ViewController? ...
- SQLite.swift的简单使用
使用cocoapod 来进行引入 pod 'SQLite.swift' // // SQLiteTool.swift // CreateLectureForSwift // // Created by ...
- Swift学习总结【持续更新】
1. try.try?.try!的区别: try:需要用catch捕捉异常,如: do {let data = try encoder.encode(item) try data.write(to: ...
最新文章
- ajax异步传输数据时return返回总是undefined(转载)
- python反转链表和成对反转
- Spring-AOP概述
- RHEL 6.0安装Qt
- 引入struts html标签,【学习】Struts标签之html标签
- linux java weblogic,Linux java 安装问题
- 泰坦尼克号python数据分析统计服_Titanic数据分析报告(Python)
- power bi 创建空表_如何使用R在Power BI中创建地理地图
- 大数据技术在应急事件处理中的启示
- python找不到csv文件路径_无法识别csv的构造文件路径。但文件是
- 西游记中荆棘岭五个树精
- Windows 系统维护
- 数据库:数据查询(指定的列、全部列、经过计算的值、消除重复的行、查询满足条件的元组、比较查询、范围查询、集合查询、字符匹配查询)
- 把linux当无线路由器用,基于树莓派的无线路由器改造
- 基于OpenAI的Chatbot开发记录
- 运用KDJ交叉形态把握短期买卖点
- ubuntu kylin17 安装字体教程
- 狂神redis笔记_狂神说redis笔记(三)
- 在早教阶段幼儿应不应该使用计算机,计算机与幼儿教育
- Qt Qwdget 汽车仪表知识点拆解6 自定义控件