前端之家收集整理的这篇文章主要介绍了
Swift基础语法2,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
import UIKit
/*
类的定义
class myClass : superClass{
}
class Person{
var age = 0
}
let p = Person()
p.age = 27
class Person2 : NSObject{
var age = 0
override func setValue(_ value: Any?,forUndefinedKey key: String) {
}
}
let p2 = Person2()
p2.setValuesForKeys(["age":18])
print(p2.age)
p2.setValue("kenshin",forKey: "xiwang")
定义类的属性
Swift中类的属性有多重
存储属性:存储实例的常量和变量【最常用】
计算属性:通过某种方式计算出来的属性
类属性:与整个类自身相关的属性
class Student : NSObject{
var age = 0
var name:String?
var chinesescore = 0.0
var mathscore = 0.0
func average() -> Double {
return(chinesescore + mathscore) * 0.5;
}
var averageSocre:Double {
return(chinesescore + mathscore) * 0.5;
}
static var courseCount = 0
}
Student.courseCount = 2
let stu = Student()
stu.age = 10
stu.name = "fxw"
stu.chinesescore = 85.5
stu.mathscore = 90;
print(stu.age)
if let name = stu.name{
print(name)
print("\(name)的平均成绩是:\(stu.average())")
print("我们有 \(Student.courseCount)门课程")
}
stu.averageSocre
类的构造函数
1.类的构造函数类似于OC的初始化方法,init方法
2.默认情况下,创建一个类对象必然会调用构造函数
3.就算没有编写任何构造函数,编译器也会提供一个默认的构造函数
4.如果是继承自NSObject 可以对父类的构造函数进行重写
class Person : NSObject{
var name : String?
var age : Int = 0
override init() {
print("老铁 你调用了构造函数")
}
init(name : String,age : Int){
self.name = name
self.age = age
print("大家好 我叫\(name) 今年\(age)岁了")
}
init(dic : [String : AnyObject]){
super.init()
setValuesForKeys(dic)
}
}
let p = Person()
let p2 = Person(name: "小强",age: 100)
p2.age
if let name = p2.name{
print(name)
}
swift中 闭包的循环引用问题
解决循环引用的第一种方法:使用 弱引用的self
通过 weak var weakSelf = self 定义
weakSelf? 的意思是
如果前面的可选类型没有值,后面所有的代码都不会执行
如果前面的可选类型有值,系统会自动将weakSelf进行解包,并且使用weakSelf
方式一:
weak var weakSelf = self
tool.loadInfo { (str) in
weakSelf?.view.backgroundColor = UIColor.yellow
print(str)
}
方式二:使用前 必须保证当前 self不为空 不然会崩溃
这里使用的 unowned 它相当于OC里面的 unsafe_unretained
OC中
__weak:修饰的弱引用,如果指向的对象销毁,那么指针会立即指向nil(0x0)
unsafe_unretained:修饰的弱引用,如果指针指向的对象销毁,指针已然指向之前的内存地址->所以一单改指向的对象销毁后
就会产生“野指针”/“僵尸对象”
综上:unowned 同 unsafe_unretained
tool.loadInfo {[unowned self] (str) in
self.view.backgroundColor = UIColor.yellow
print(str)
方式三[推荐使用]:其实方式二是方式一的简化写法 意思是一样的
就是直接[weak self] 并且后面使用的self是一个可选类型 self? 意思和方式一相同
tool.loadInfo {[weak self] (str) in
self?.view.backgroundColor = UIColor.yellow
print(str)
}
}
tool.loadInfo {[weak self] (str) in
self?.view.backgroundColor = UIColor.yellow
print(str)
}