一、结构体
1.1-基本使用
struct Date{
var year:Int
var month:Int
var day:Int
}
var date=Date(year:2020,month:5,day:4)
print(date.self)
Date(year: 2020, month: 5, day: 4)
1.2-结构体的构造方法
struct Test{
var a:Int
var b:Int
}
var t1 = Test(a:1,b:2)
print(t1)
Test(a: 1, b: 2)
var t2 = Test(a:1)
Missing argument for parameter 'b' in call
var t3 = Test(b:2)
Missing argument for parameter 'a' in call
var t4 = Test()
Missing argument for parameter 'a' in call
struct Test{
var a:Int = 1
var b:Int = 2
}
var t1 = Test()
print(t1)
var t2 = Test(a:3)
print(t2)
var t3 = Test(b:4)
print(t3)
var t4 = Test(a:3,b:4)
print(t4)
Test(a: 1, b: 2)
Test(a: 3, b: 2)
Test(a: 1, b: 4)
Test(a: 3, b: 4)
1.3.1-结构体的自定义构造方法
struct Test {
var a: Int = 0
var b: Int = 0
init(a: Int, b: Int){
self.a=a
self.b=b
}
}
t1=Test()
Use of unresolved identifier 't1'
var test=Test(a:1,b:2)
print(test)
Test(a: 1, b: 2)
struct Test {
var a: Int = 0
var b: Int = 0
}
struct Test {
var a: Int
var b: Int
init(){
a=0
b=0
}
}
1.3.2 编译器init和自定义init本质比较
struct Test1 {
var a: Int = 0
var b: Int = 0
}
var t1 = Test1()
print(t1)
struct Test2 {
var a: Int
var b: Int
init(){
a=0
b=0
}
}
var t2 = Test2()
print(t2)
-> 0x100001502 <+18>: callq 0x100001810 ; test.Test1.init() -> test.Test1 at main.swift:1
test`Test1.init():
-> 0x100001810 <+0>: pushq %rbp
0x100001811 <+1>: movq %rsp, %rbp
0x100001814 <+4>: xorps %xmm0, %xmm0
0x100001817 <+7>: movaps %xmm0, -0x10(%rbp)
0x10000181b <+11>: movq $0x0, -0x10(%rbp)
0x100001823 <+19>: movq $0x0, -0x8(%rbp)
0x10000182b <+27>: xorl %eax, %eax
0x10000182d <+29>: movl %eax, %ecx
0x10000182f <+31>: movq %rcx, %rax
0x100001832 <+34>: movq %rcx, %rdx
0x100001835 <+37>: popq %rbp
0x100001836 <+38>: retq
-> 0x1000015f3 <+259>: callq 0x100001910 ; test.Test2.init() -> test.Test2 at main.swift:12
test`Test2.init():
-> 0x100001910 <+0>: pushq %rbp
0x100001911 <+1>: movq %rsp, %rbp
0x100001914 <+4>: xorps %xmm0, %xmm0
0x100001917 <+7>: movaps %xmm0, -0x10(%rbp)
0x10000191b <+11>: movq $0x0, -0x10(%rbp)
0x100001923 <+19>: movq $0x0, -0x8(%rbp)
0x10000192b <+27>: xorl %eax, %eax
0x10000192d <+29>: movl %eax, %ecx
0x10000192f <+31>: movq %rcx, %rax
0x100001932 <+34>: movq %rcx, %rdx
0x100001935 <+37>: popq %rbp
0x100001936 <+38>: retq
1.4结构体的内存结构
struct Test {
var a: Int
var b: Int
var c:Bool
init(){
a=0
b=0
c=false
}
}
print(MemoryLayout<Test>.alignment)
print(MemoryLayout<Test>.size)
print(MemoryLayout<Test>.stride)
8
17
24