Swift中类的使用

简介: Swift中类的使用
  • 1.主要内容
    类的介绍和定义
    类的属性
    类的构造函数
  • 2.类的介绍和定义Swift也是一门面向对象开发的语言面向对象的基础是类,类产生了对象在Swift中如何定义类呢?


  • class是Swift中的关键字,用于定义类
class 类名 : SuperClass {
     // 定义属性和方法
}
  • 注意
    定义的类,可以没有父类.那么该类是rootClass
    通常情况下,定义类时.继承自NSObject(非OC的NSObject)


  • 3.如何定义类的属性
  • 1.类的属性介绍Swift中类的属性有多种
  • 存储属性:存储实例的常量和变量
  • 计算属性:通过某种方式计算出来的属性
  • 类属性:与整个类自身相关的属性
  • 2.存储属性
  • 存储属性是最简单的属性,它作为类实例的一部分,用于存储常量和变量
  • 可以给存储属性提供一个默认值,也可以在初始化方法中对其进行初始化
  • 下面是存储属性的写法
    agename都是存储属性,用来记录该学生的年龄姓名
    chinesemath也是存储属性,用来记录该学生的语文分数数学分数


//  定义一个类
class Student : NSObject{
  // 定义属性
  // 存储属性
  var name:String?
  var age:Int = 0
  var chinese:Double = 0.0
  var math:Double = 0.0
}
//  创建一个学生对象
let stu = Student()
// 给储存属性赋值
stu.name = "王冲"
stu.age = 25
stu.chinese = 98.5
stu.math = 115.6
  • 3.计算属性
  • 1.计算属性并不存储实际的值,而是提供一个getter和一个可选的setter来间接获取和设置其它属性
  • 2.计算属性一般只提供getter方法
  • 3.如果只提供getter,而不提供setter,则该计算属性为只读属性,并且可以省略get{}
  • 4.下面是计算属性的写法
  • 1.averageScore是计算属性,通过chineseScore和mathScore计算而来的属性
  • 2.在setter方法中有一个newValue变量,是系统指定分配的


class Student : NSObject {
// 定义属性
// 存储属性
var age : Int = 0
var name : String?
var chineseScore : Double = 0.0
var mathScore : Double = 0.0
// 计算属性
var averageScore : Double {
    get {
          return (chineseScore + mathScore) / 2
     }
// 没有意义,因为之后获取值时依然是计算得到的
// newValue是系统分配的变量名,内部存储着新值
set {
         self.averageScore = newValue
   }
 }
}
// 获取计算属性的值
print(stu.averageScore)
  • 4.类属性
  • 类属性是与类相关联的,而不是与类的实例相关联
  • 所有的类和实例都共有一份类属性.因此在某一处修改之后,该类属性就会被修改
  • 类属性的设置和修改,需要通过类来完成
  • 下面是类属性的写法
    类属性使用static来修饰
    courseCount是类属性,用来记录学生有多少门课程


class sTudent : NSObject{
// 定义属性
// 存储属性
var age : Int = 0
var name : String?
var chineseSorce : Double = 0.0
var mathsorce : Double = 0.0
// 计算属性
var averageSorce : Double {
  get {
       return (chineseSorce + mathsorce)/2.0
   }
  // 没有意义 newValue是系统分配的变量名,内部存储着新值
  set{
       return self.averageSorce = newValue
  }
}
  // 类属性
  static var corseCount : Int = 0
}
// 设置该类的属性
sTudent.corseCount = 3
// 取出类属性的值
print(sTudent.corseCount)
  • 5.监听属性的改变
  • 在OC中我们可以重写set方法来监听属性的改变
  • Swift中可以通过属性观察者来监听和响应属性值的变化
  • 通常是监听存储属性和类属性的改变.(对于计算属性,我们不需要定义属性观察者,因为我们可以在计算属性的setter中直接观察并响应这种值的变化)
  • 我们通过设置以下观察方法来定义观察者
  • willSet:在属性值被存储之前设置。此时新属性值作为一个常量参数被传入。该参数名默认为newValue,我们可以自己定义该参数名
  • didSet:在新属性值被存储后立即调用。与willSet相同,此时传入的是属性的旧值,默认参数名为oldValue
  • willSetdidSet只有在属性第一次被设置时才会调用,在初始化时,不会去调用这些监听方法


  • 监听的方式如下:
    监听age和name的变化
    class Person : NSObject {


var name1 : String? {
// 可以newValue自定义名称
willSet (new){
// 属性即将改变,还未改变时会调用此方法
// 在该方法中还有一个系统默认的属性newValue来存储新值
print(name1!)
print(new!)
 }
 // 可以给oldValue定义名称
 didSet (old) {
 // 属性值已经改变了会调用该方法
 // 在该方法中有一个默认的系统属性oldValue,用于存储旧值
 print(name1!)
 print(old!)
 }
}
 var age : Int = 0
 var height : Double = 0.0
}
let  person : Person = Person()
// 在赋值时监听该属性的改变
// 在OC中重写set方法
// 在swift可以给属性添加监听器
person.name1 = "why"
//p.name = "yz"
  • 6.自己定义的一个类


/*
 *1.类的定义
 *2.创建类对应的对象
 *3.给类的属性复制 --> 直接复制和通过kvc赋值
 *4.可以重写override func setValue(_ value: Any?, forUndefinedKey key: String) 那么字典没有的字段可以在类中没有对应的属性
 *5.override : 重写,如果重写的一个方法进行的重写,那么必须在该方法前加上 override
 */
 class person : NSObject{
 var age : Int = 0
 // override : 重写,如果写的某一个方法是对父类方法的重写那么必须在该方法前加上 override
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
     }
}
let p = person()
p.setValuesForKeys(["age":19,"name":"joanking"])
print(p.age)


目录
相关文章
|
3月前
|
安全 IDE Swift
Swift
Swift
32 0
|
3月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
71 1
|
Swift
swift中使用NSClassFromString
swift中使用NSClassFromString
303 0
|
存储 测试技术 Swift
Swift-RealmSwift 的使用
Swift-RealmSwift 的使用
733 0
Swift-RealmSwift 的使用
|
区块链 Swift
当我们在谈SWIFT时,到底在谈什么?
当我们在谈SWIFT时,到底在谈什么?
当我们在谈SWIFT时,到底在谈什么?
|
Swift 数据安全/隐私保护
Swift 简单总结
1. swift简单总结(一)—— 数据简单值和类型转换2. swift简单总结(二)—— 简单值和控制流3. swift简单总结(三)—— 循环控制和函数4.
1276 0
|
iOS开发
Swift 2.3升级到Swift 3.0小记
> 阿里云App从Swift 2.1开始使用Swift,随时不断的推进,现在所有的业务代码都用Swift编写。由于Swift 3.0语法上有诸多改变,所以从Swift 2.3升级到Swift 3.0是一件宜早不宜迟的事情。元旦期间抽了点时间做这个升级。 ### 外部依赖 * 目前开源社区对Swift 3.0支持是非常好的,我们依赖的开源组件最新版本都支持Swift 3.0了,所以并没有
1740 0
|
Swift 计算机视觉
图片轮播器(swift)
如何实现一个无限循环,无缝衔接的图片轮播器 自己实现一次以后就不用使用轮播器的框架了 能用代码解决的问题就不在这里瞎BB了  O(∩_∩)O 首先先在Carousel文件件夹创建以下几个文件 CarouselFlowLayout.
1021 0