swift学习

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(){
    
}

}

你可能感兴趣的:(swift知识点)