一、类
1.1-基本使用
class Test {
var a: Int
var b: Int
}
class Test {
var a: Int = 0
var b: Int = 0
}
let t1 = Test ( )
let t2= Test ( a: 1 , b: 2 )
1.2-类的构造函数
class Test2 {
var a: Int = 1
var b: Int = 2
}
class Test2 {
var a: Int
var b: Int
init ( ) {
a= 1
b= 2
}
}
let t1 = Test1 ( )
let t2 = Test2 ( )
print ( t1. a)
print ( t2. a)
1
1
class Test {
var a: Int
var b: Int
init ( a: Int , b: Int ) {
self . a= a
self . b= b
}
}
let t1 = Test ( a: 1 , b: 2 )
print ( t1. a)
print ( t1. b)
1
2
init ? ( 参数名 :参数类型) {
if ( 条件) { return nil }
}
1.3-结构体和类的区别
class Test1 {
var a = 1
var b = 2
}
0x1000010db < + 43 > : callq 0x100001810 ; test. Test1 . __allocating_init ( ) - > test. Test1 at main. swift: 1
0x1000010e0 < + 48 > : movq 0xf19 ( % rip) , % rcx ; ( void * ) 0x00007fff8d9029d8 : type metadata for Any
0x1000010e7 < + 55 > : addq $0x8 , % rcx
0x1000010ee < + 62 > : movq % rax, 0x2113 ( % rip)
struct Test2 {
var a = 3
var b = 4
}
; test. t1 : test. Test1
test`Test2 . init ( ) :
- > 0x100000b60 < + 0 > : pushq % rbp
0x100000b61 < + 1 > : movq % rsp, % rbp
0x100000b64 < + 4 > : xorps % xmm0, % xmm0
0x100000b67 < + 7 > : movaps % xmm0, - 0x10 ( % rbp)
0x100000b6b < + 11 > : movq $0x3 , - 0x10 ( % rbp)
0x100000b73 < + 19 > : movq $0x4 , - 0x8 ( % rbp)
0x100000b7b < + 27 > : movl $0x3 , % eax
0x100000b80 < + 32 > : movl $0x4 , % edx
0x100000b85 < + 37 > : popq % rbp
0x100000b86 < + 38 > : retq
二、值类型、引用类型
2.1-值类型
struct Test2 {
var a = Int
var b = Int
}
t1 = Test2 ( a: 3 , b: 4 )
t2 = t1
var t1 = "Test"
var t2 = t1
t2. append ( "_1" )
print ( t1)
Test
print ( t2)
Test_1
var t1= [ 1 , 2 , 3 ]
var t2= t1
t2. append ( 4 )
t1[ 0 ] = 5
print ( t1)
[ 5 , 2 , 3 ]
print ( t2)
[ 1 , 2 , 3 , 4 ]
var t1= [ "a" : 1 , "b" : 2 ]
var t2= t1
t1[ "c" ] = 3
t2[ "d" ] = 4
print ( t1)
[ "b" : 2 , "c" : 3 , "a" : 1 ]
print ( t2)
[ "b" : 2 , "d" : 4 , "a" : 1 ]
2.2-引用类型
class Test {
var a: Int
var b: Int
init ( a: Int , b: Int ) {
self . a= a
self . b= b
}
}
var t1= Test ( a: 1 , b: 2 )
var t2= t1
t2. a= 3
t2. b= 4
print ( t1. a, t2. a)
print ( t1. b, t2. b)
3 3
4 4
2.3-嵌套类型