类 结构体 属性

//关键词 class来定义类使用 struct来定义结构体

class Person {

}

struct SomeStruct {

}

//创建一个

struct OtherStruct {

var name = "slc"

var age = 24

}

class VidemModel {

var stru = OtherStruct()

var boo = false

var name : String?

}

//创建结构体和类的实例的语法是非常相似的:

//结构体和类两者都能使用初始化器语法来生成新的实例。初始化器语法最简单的是在类或结构体名字后面接一个空的圆括号,例如 Resolution()或者 VideoMode()。这样就创建了一个新的类或者结构体的实例,任何属性都被初始化为它们的默认值。在初始化一章有对类和结构体的初始化更详尽的描述。

let someResolution = OtherStruct()

let someVideoMode = VidemModel()

//你可以用点语法来访问一个实例的属性

print("mingzi\(someResolution.name)")

print("shuxing\(someVideoMode.boo)")

print("shuxing\(someVideoMode.stru.age)")

//用点语法来指定一个新值到一个变量属性中:

someVideoMode.stru.name = "s"

//所有的结构体都有一个自动生成的成员初始化器,你可以使用它来初始化新结构体实例的成员属性。新实例属性的初始化值可以通过属性名称传递到成员初始化器中:

//与结构体不同,类实例不会接收默认的成员初始化器

let vgr = OtherStruct(name:"ss",age: 23)

//lazy 就是oc中的懒加载

//一个属性的初始值可能依赖于某些外部因素,当这些外部因素的值只有在实例的初始化完成后才能得到时,延迟属性就可以发挥作用了。而当属性的初始值需要执行复杂或代价高昂的配置才能获得,你又想要在需要时才执行,延迟属性就能够派上用场了

class dateInterface{

var filename = "name"

}

class dataString {

lazy var interface:dateInterface = dateInterface()

var data = ""

}

let da = dataString()

da.data.append("iloc")

let file = da.interface.filename //此时才加载lazy修饰的

/*

如果你有 Objective-C 的开发经验,那你应该知道在类实例里有两种方法来存储值和引用。另外,你还可以使用实例变量作为属性中所储存的值的备份存储。

Swift 把这些概念都统一到了属性声明里。Swift 属性没有与之相对应的实例变量,并且属性的后备存储不能被直接访问。这避免了不同环境中对值的访问的混淆并且将属性的声明简化为一条单一的、限定的语句。所有关于属性的信息——包括它的名字,类型和内存管理特征——都作为类的定义放在了同一个地方。

*/

//----------------------------------计算属性--------------------------------------------

//除了存储属性,类、结构体和枚举也能够定义计算属性,而它实际并不存储值。相反,他们提供一个读取器和一个可选的设置器来间接得到和设置其他的属性和值。

struct Point {

var x = 0.0,y = 0.0

}

struct Size {

var width = 0.0, height = 0.0

}

struct Rect {

var origin = Point()

var size = Size()

var center:Point {

get {

let centerX = origin.x + (size.width/2.0)

let centerY = origin.y + (size.height/2.0)

return Point(x: centerX,y: centerY)

}

set(newCenter){

origin.x = newCenter.x - (size.width/2.0)

origin.y = newCenter.y - (size.height/2.0)

}

}

}

var square = Rect(origin: Point(x: 1 ,y: 2),size:Size(width: 2,height: 3))

let cen = Point(x:2,y:3)

square.center = cen

print("square.origin is now at (\(square.origin.x),\(square.origin.y))")

/*

属性观察者会观察并对属性值的变化做出回应。每当一个属性的值被设置时,属性观察者都会被调用,即使这个值与该属性当前的值相同。

你可以为你定义的任意存储属性添加属性观察者,除了延迟存储属性。你也可以通过在子类里重写属性来为任何继承属性(无论是存储属性还是计算属性)添加属性观察者。属性重载将会在重写中详细描述。

*/

class StepCounter{

var totalStep:Int = 0{

willSet(newTotal){

print(newTotal)

}

didSet{

if oldValue > totalStep {

print(oldValue - totalStep)

}

}

}

}

let step:StepCounter = StepCounter()

step.totalStep = 10

step.totalStep = 5

//一个有读取器但是没有设置器的计算属性就是所谓的只读计算属性。只读计算属性返回一个值,也可以通过点语法访问,但是不能被修改为另一个值。

struct cooid{

var width = 0.0,height = 0.0,length = 0.0

var square:Double{

return width * height * length

}

//suqare是只读的

}

let cod = cooid.init(width: 3, height: 4, length: 5)

print(cod.square)

时间: 2025-01-02 17:38:02

类 结构体 属性的相关文章

Swift基础(类,结构体,函数)

import Foundation // 创建一个类 class Student { // 属性(类的属性必须赋初值,如果不赋值,需要写自定义方法) var studentName: String var studentAge: Int // 方法 func fallInLove(girlName:String) { print("\(self.studentName)看上隔壁的\(girlName)") } // 构造方法(自定义init方法) init (studentName1:

Swift 类 结构体

passport.baidu.com/?business&un=%E9%98%BF%E5%9F%8E%E5%B0%8F%E5%A7%90%E8%81%94%E7%B3%BB%5F%5F#0 passport.baidu.com/?business&un=%E7%99%BD%E5%B1%B1%E5%B0%8F%E5%A7%90%E6%83%85%E4%B8%80%E5%A4%9C#0 passport.baidu.com/?business&un=%E7%99%BD%E5%B1%B1

Swift 结构体和类

//*---------------------结构体-------------*/ //swift结构体也具有封装的概念 //swift结构体比OC C语言里面的结构体更加进了一步,里面可以有方法,更接近我们的类 //结构体的定义格式 struct结构体名{成员变量} struct rect { var width:Double //按构造方法赋初值 var height:Double //方法 func getHeightWidth() -> (x:Double,y:Double)//->

oc-Foundation框架中的结构体

Foundation框架中包含了很多常用的数据类型: 结构体 枚举 类 结构体 NSRange  表示范围 NSPoint\CGPoint  位置 NSSize\CGSize 尺寸 NSRect\CGRect 包含位置,尺寸(CGPoint,CGSize)

5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左到右对应0,1,2,3 enum CompassPoint { case North case South case East case West //enum中可以定义方法 func show(){ print(self) } } //定义enum 变量 var p = CompassPoint.Nor

OC基础--结构体 枚举做类成员属性

结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation/Foundation.h> typedef struct { int year; int month; int day; } Date; typedef enum { kGenderGirl = 0, kGenderBoy = 1, kGenderChunGe = 2 } Gender; @inter

swift结构体和类属性-005-swift类结构体基本属性

//: Playground - noun: a place where people can play import UIKit //---属性-------// //1.结构体的属性 struct MyRange { var location : Int //变量属性 let length: Int //常量属性 } //如果没有给定属性的初值,则实例化结构体需要使用逐一构造器进行构造 var range1 = MyRange(location: 0, length: 3) print(ra

C++中结构体和类的区别

在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public) C++中,不使用结构体丝毫不会影响程序的表达能力.C++之所以要引入结构体,是为了保持和C程序的兼容性. 但有时仍会在C++中使用结构体,是因为,可以使用结构体将不同类型数据组成整体,方便于保存数据.(若用类来保存,因类中成

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存