标签:
//创建一个类
class Person {
var name = ""
var age = 0
//函数
func runing() {
print("人在跑步")
}
func study() {
print("人在学习")
}
}
//继承
class Student : Person {
var sno : Int = 0
//重写父类的方法
override func study() {
print("学生在敲代码")
}
override init() {
super.init(name: "", age: 20)
}
}
class Teacher: Person {
//重写: 子类对父类的方法不满意,重写进行实现
override func study() {
print("老师在备课")
}
}
//创建对象
let stu = Student()
stu.sno = 110
stu.name = "xaiofeng"
stu.age = 19
stu.runing()
stu.study()
let tea = Teacher()
tea.study()
class MathTool {
func sum(num1 : Int, num2 : Int) ->Int {
return num1 + num2
}
func sum(num1 : Int, num2 : Int, num3 : Int) ->Int {
return num1 + num2 + num3
}
func sum(num1 : Int, num2 : Int, num3 : Int, num4 : Int) ->Int {
return num1 + num2 + num3 + num4
}
}
let mathTool = MathTool()
func studentInNight(p : Person) {
p.study()
}
studentInNight(stu)
studentInNight(tea)
class Person {
var name = ""
var age = 0
//函数
func runing() {
print("人在跑步")
}
func study() {
print("人在学习")
}
//如果该类继承了NSObject,那么就必须在init前面加上override,因为init是父类的方法,这样做事属于重写
init() {
}
//设计构造方法
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
class Person {
var name = ""
deinit {
print("Person-----deinit")
}
}
//创建类对应的对象
var person : Person? = Person()
//定义两个类
class Person {
var name = ""
// person有一本书
var book : Book?
deinit {
print("Person-----deinit")
}
}
class Book {
var price = 0.0
//书有一个主人
var owner : Person?
deinit {
print("Book -- deinit")
}
}
//创建类对应的对象
var person : Person? = Person()
var book : Book? = Book()
weak var book : Book?
unowned var book : Book = Book()
class Person {
var name = ""
var dog : Dog?
}
class Dog {
var name = ""
var toy : Toy?
}
class Toy {
var price : Double = 0.0 {
didSet {
print(price)
}
}
//玩具有一个具体行为
func rotating() {
print("玩具在转圈")
}
}
//创建对象
let person : Person = Person()
person.name = "xiaofeng"
let dog : Dog = Dog()
dog.name = "bigYellowDog"
let toy : Toy = Toy()
toy.price = 1.0
//让对象之间产生关系
person.dog = dog
dog.toy = toy
person.dog!.toy!.price = 50.0
person.dog?.toy?.price = 50.0
let price = person.dog!.toy!.price
let price1 = person.dog?.toy?.price
print(price1)
person.dog!.toy!.rotating()
if let dog = person.dog {
if let toy = dog.toy {
toy.rotating()
}
}
person.dog?.toy?.rotating()
protocol SomeProtocol {
// 协议方法
}
class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol {
// 类的内容
// 实现协议中的方法
}
//定义协议
protocol CrazySportProtocol {
func jumping()
func jumpingSan()
}
//协议之间的继承
protocol SportProtool : CrazySportProtocol {
func playBasketball()
func playFootball()
}
//创建类遵守协议
class Person : SportProtool {
//遵守了协议就必须实现协议中的方法
func jumping() {
print("蹦极")
}
func jumpingSan() {
print("跳伞")
}
func playBasketball() {
print("打篮球")
}
func playFootball() {
print("踢足球")
}
}
//创建对象调用方法
var person = Person()
person.jumpingSan()
person.jumping()
person.playBasketball()
person.playFootball()
//定义协议
protocol BuyTicketDelegate : class {
func buyTicketing()
}
//创建类
class Person {
var name = ""
//设置代理
weak var delegate : BuyTicketDelegate?
func goToBeiJing() {
//使用代理调用对应的方法
// delegate?.buyTicketing()
print("坐火车去北京")
}
}
//定义一个类,并且遵守协议
class YellowCattle : BuyTicketDelegate {
//将人设置里面的属性
var vipPerson : Person?
//实现协议中的方法
func buyTicketing() {
print("黄牛帮你买了一张票")
}
}
//创建对象
let person = Person()
person.name = "xiaofeng"
//创建黄牛对象
let huangniu = YellowCattle()
huangniu.vipPerson = person
//将黄牛设置为代理
person.delegate = huangniu
person.goToBeiJing()
//将上objc和optional就代表了可以选择的实现
@objc
protocol SportsProtocol {
optional func jumping()
optional func jumpingSan()
}
class Person1 : SportsProtocol {
@objc func jumping() {
print("蹦极")
}
}
let p = Person1()
p.jumping()
@interface HttpTool : NSObject
- (void)loadRequest:(void (^)())callBackBlock;
@end
@implementation HttpTool
- (void)loadRequest:(void (^)())callBackBlock
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"加载网络数据:%@", [NSThread currentThread]);
dispatch_async(dispatch_get_main_queue(), ^{
callBackBlock();
});
});
}
@end
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.httpTool loadRequest:^{
NSLog(@"主线程中,将数据回调.%@", [NSThread currentThread]);
}];
}
block的写法:
类型:
返回值(^block的名称)(block的参数)
值:
^(参数列表) {
// 执行的代码
};
class HttpTool: NSObject {
func loadRequest(callBack : ()->()){
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("加载数据", [NSThread.currentThread()])
dispatch_async(dispatch_get_main_queue(), { () -> Void in
callBack()
})
}
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
// 网络请求
httpTool.loadRequest ({ () -> () in
print("回到主线程", NSThread.currentThread());
})
}
闭包的写法:
类型:(形参列表)->(返回值)
技巧:初学者定义闭包类型,直接写()->().再填充参数和返回值
值:
{
(形参) -> 返回值类型 in
// 执行代码
}
httpTool.loadRequest({
print("回到主线程", NSThread.currentThread());
})
httpTool.loadRequest() {
print("回到主线程", NSThread.currentThread());
}
// 开发中建议该写法
httpTool.loadRequest {
print("回到主线程", NSThread.currentThread());
}
lazy var 变量: 类型 = { 创建变量代码 }()
lazy var names : [String] = {
return ["xiaofeng", "it", "nb"]
}()
lazy var btn : UIButton = {
let tempBtn = UIButton()
tempBtn.setTitle("按钮", forState: .Normal)
return tempBtn
}()
lazy var button : UIButton = UIButton()
系统如何处理:
标签:
原文地址:http://blog.csdn.net/xf931456371/article/details/51268012