自己理解老师所说的!
var myset: Set<Int> = [1,2,3,3];//set集合是无序集合
var arr = [1,2,3];//Array有序集合
var dic = [1:"a",2:"b"];//字典是无序集合
for item in arr { //1.得到Array的长度
print(item)
}
for (index,value) in arr.enumerate() { //2.得到Array的长度
print("index is\(index) value is\(value)")
}
for (key,value) in dic { //得到字典里的长度
print("\(key) \(value)")
}
for k in dic.keys { //遍历字典里面所有的键
print(k);
}
for v in dic.values {//遍历字典里面所有的值
print(v);
}
//类的声明
//类是一个引用类型,也就是说类的实例是分配到堆中
//类:属性,方法,构造函数,析构函数,索引器(subscript)
class Person {
//存储属性,在创建的时候就回给其值
//属性观察器
var p = 20;
let p2 = 40;
var name = "ch" {
willSet {//赋值之前会调用willSet里面的内容
print("before");
print(newValue); //这是新赋的值
print(name);//这是原本name的值
}
didSet(old) {//赋值之后会调用willSet里面的内容。这里(old)是自定义print(old)里的名字的
print("after");
print(old);//这是原本的name值
print(name);//这是新赋值的name
}
}
//计算属性,get,set
//不能只有set,只有get的时候,表示只读计算属性,可以简写
//计算属性是没有属性观察者的
//计算属性是只能是var定义,不能用let定义,也不需要一开始就复制,没有必要
//计算属性是不需要属性观察器的,里面是可以写多行代码的
var age: Int {
get {
return 100;
}
set {
}
}
//只读计算属性
var readOnlyAge: Int {
get {
return 100;
}
}
//只读计算属性还可以这样定义
var readOnlyAge2: Int {
//这里是可以写多行代码的
return 100;
}
init() {
//这是Swift的初始化时调用的方法(自动)
print("init");
}
deinit {
//这是Swift的销毁时调用的方法(自动)
print("deinit");
}
}
var p = Person();
p.name = "cx";
p.age = 30;
p = Person();
//p.p2 = 50; //这里报错 let定义的p2的值是不可以被修改的
let p2 = Person();//常量指针
p2.p = 60;
//p2.p2 = 70;//这里报错 let定义的p2的值是不可以被修改的
//p2 = Person;let p2 = Person() 表明p2的值不能改变了,这个p2 = Person就是表示重新给p2赋值了。 所以错误
//三个等号是判断两个变量是否指向同一个对象
var p3 = Person();
p === p3;
var p4 = p ;
p4 === p;
class A {
init() {
print("a init");
}
}
class B {
lazy var p = A();
}
let b = B();// 使用lazy可以使不必要或复杂的初始化不总是进行,一些储存属性的初始化很费时,加lazy时合理的
//修饰为静态可以用这两个属性:class,static
//存储属性,只能用static,计算属性两个关键字都可以用
//方法也是两个关键字都可以
//区别在于:class修饰的表示子类继承父类后可以重写这些静态成员
class Image {
static var name = "my";//存储属性
//sclass var name2 = "aaa";//错误 存储属性不能用class修饰
static var Age:Int {
get {
return 100;
}
set {
}
}
static func someMethod() {
//静态方法中的self不是指类的实例,而是指类本身
//self出现在静态成员中时self指的是类本身,否则就是实例
}
class func someMethod2() {
}
}
class xiangCe {
var images = [1,2,3,4,5];
//下标 subscript,可以有多个参数
subscript(index: Int) ->Int {
get {
return images[index];
}
set {
images[index] = newValue;
}
}
func getImage(index: Int) -> Int {
return images[index];
}
}
var xc = xiangCe();
xc[0] = 1200; //通过下标修改下标对应的值
xc[0];
xc.getImage(0)
//全局变量和本地变量的定义
//全局变量:在类外面定义,作用于整个项目
//本地变量:在类里面或者方法里面定义,作用于类,和方法里