import UIKit
var str = “Hello, playground”
##一、类的属性
class People{
// 普通属性
var firstName = “”
var lastName = “”
var nickName = “”
// 计算属性
var fullName : String {
get{
return nickName + " " + firstName + " " + lastName
}
}
// 带属性监视器的普通属性
var age = 0{
willSet
{
print("Will set an new value \(newValue) to age")
}
didSet{
print("age filed changed form \(oldValue) to \(age)")
if age<10{
nickName = "little"
}else{
nickName = "big"
}
}
}
//括号内部是穿参,->后面的 string是返回值得类型。
func toString() ->String{
return "Full Name: \(fullName) " + ", Age: \(age) "
}
}
//初始化对象
let me = People()
me.firstName = “zhang”
me.lastName = “kai”
me.age = 27
print(me.toString())
//class 关键字专门用在class类型的上下文中,可以用来修饰类方法以及类的计算属性。
class Account {
var account = 0.0 //账户金额
var owner = “zhangkai” //账户名
static var interestRate : Double = 0.5//利率
class var staticProp: Double {
return 0.668
}
class func interestBy (amount : Double) ->Double {
return staticProp*amount*interestRate
}
}
let money = Account()
//访问类计算属性
print(Account.staticProp)
money.account = 1000
print(money.owner)
print(Account.interestBy(amount: money.account))
/*
关键:class修饰的是类方法,static修饰的是静态方法。
*/
/*
三、Swift可以使用计算属性,即使用get和set来间接获取/改变其他属性的值。
*/
class Calcuator{
var a = 1
var b = 1
var sum : Int{
get{
return a+b
}
set(val){ //val只是一个int类型的参数
b = val - a
}
/*
1、对于set有简写方法,简写时,新赋值默认为newValue
set{
b = newValue - a
}
*/
}
/*
2、如果只要get,不需要set方法,可以简写成如下代码
var sum :Int {
return a+b
}
*/
}
let cal = Calcuator()
print(cal.sum)
cal.sum = 5
print(“根据set赋值求出 b:(cal.b)”)
/*
四、类和结构体的区别
区别如下:
1、类可以继承,结构体不行
2、类可以被deinit(析构),释放存储空间,结构体不行
3、类的对象是引用类型,而结构体是值类型。所以类的赋值是引用,结构体是传值。
相同点:
1、类和结构体都可以扩展
2、定义属性用于存储值
3、定义方法用于提供功能
4、定义初始化器用于生成初始化值。
*/
/*
五、访问控制(fileprivate,private,internal,public,open)
1、private(私人的、私有的)
访问级别所修饰的属性或方法只能在当前类里访问。(swift4.0中,extension里也可以访问private)
2、fileprivate
访问级别所修饰的属性或者方法在当前的swift源文件里可以访问。
3、internal
默认访问级别,可写可不写。
访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问
4、public
可以被任何人访问,但其他 module 中不可以被 override 和继承,而在 module 内可以被 override 和继承。
5、open
可以被任何人使用,包括override和继承。
访问权限高低排名:
open > public > internal > fileprivate > private
*/
/*
六、swift-类扩展 (extension)
1、给已有的类添加计算属性
2、定义新的实例方法和类方法
3、提供新的构造器
4、使一个已有类型符合某个协议 (斗鱼常用)
注意:
1、扩展只能添加新的计算属性,不能添加存储属性,也不能添加新的存储属性。runtimeo用可以。
2、在swift4.0中,扩展可以访问private的属性。
*/
/*
七、swift-协议
1、Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名、返回值、参数等信息,而没有具体的方法实现
2、协议可以继承另一个协议
3、如果某个类继承了某个父类,又遵循了某个协议,那么冒号后面应该先写父类,再写协议
class CC : 父类,协议1,协议2{ }
*/
/*
八、swift-文件操作大全
*/
let manager = FileManager.default
let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)
let url = urlForDocument[0] as URL
print(url)
/*
九、label
知识点:http://www.hangge.com/blog/cache/detail_528.html
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//设置标签x坐标:10,y坐标:20,长:300,宽:100
let label = UILabel(frame:CGRect(x:10, y:20, width:300, height:100))
label.text = "hangge.com"
label.textColor = UIColor.white
label.textAlignment = .center
self.view.addSubview(label)
let button = UIButton(frame: CGRect(x:10, y:150, width:100, height:30))
button.setTitle("普通状态", for: .normal)
button.setTitle("触摸状态", for: .highlighted)
button.setTitle("禁用状态", for: .disabled)
button.setTitleColor(UIColor.white, for: .normal)
button.setBackgroundImage(UIImage(named: "zhangkai"), for: .normal)
button.addTarget(nil, action: #selector(tapped), for: .touchUpInside)
}
@objc func tapped(){
}
}