设为首页 加入收藏

TOP

Swift基础(二)(二)
2017-10-10 12:15:34 】 浏览:4492
Tags:Swift 基础
nimal { var name:String
? var age:Int? init (name:String,age:Int){ self.name = name self.age = age } } var dog = animal(name: "阿A", age: 3) var dog1 = dog dog1.name = "换换" print("dog = \(dog)") print("dog1 = \(dog1)") // 引用值类型 class animal{ var name:String? var age:Int? init(name:String,age:Int){ self.name = name self.age = age } } var dog = animal(name: "啊c", age: 2) var dog1 = dog dog.name = "换换" print("dog = \(dog.name)") print("dog1 = \(dog1.name)")
  • 使用值类型的情形:
  • 使用==运算符比较实例数据的时候。
  • 你想单独复制一份实例数据的时候。
  • 当在多线程环境下操作数据的时候。
  • 使用引用类型(比如class)的情形:
  • 当使用===运算符判断两个对象是否引用同一个对象实例的时候。
  • 当上下文需要创建一个共享的、可变的对象时。

4、协议

  • 协议定义了一个蓝图,规定了用来实现某一特定工作或者功能所必需的方法和属性。
  • 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。
  • 任意能够满足协议要求的类型被称为遵循(conform)这个协议。
  • @objc 修饰的协议,其中的方法可以声明成可选实现(使用optional修饰)。
// MARK: - 协议(protocol)
// 当Swift中声明协议的时候,协议里有可选方法需要使用@objc关键字修饰
@objc protocol MarryDelegate{
    func cook() // 做饭
    func wash() // 洗衣服
    optional func hitDouDou() // 打豆豆.可选方法
}
protocol DivorceDelegate{
    func divisionProperty() // 分割财产
}
// 先写继承的类,然后再写要遵守的协议
class Man:Person,MarryDelegate,DivorceDelegate {
    @objc func cook() {
        print("做饭")
    }
    @objc func wash() {
        print("洗衣服")
    }
    func divisionProperty() {
        print("分财产")
    }
}

var man:Man = Man(name: "ad", age: 23)
man.cook()
man.wash()

man.divisionProperty()

5、扩展

  • extension + 类名(结构体名字)可以对一个类和结构体扩展方法
  • extension可以多次对一个类进行扩展,也可以给一个类扩展协议方法
// MARK: - 扩展(Extension)
// 1.扩展协议中的相关方法
extension Man {
    @objc func hitDouDou() {
        print("dsadasdas")
    }
}
man.hitDouDou()
// 2.扩展还可以扩展类方法(给某一个类添加方法,类似于OC中的Category)以及对象方法
extension Man{
    // 扩展一个对象方法
    func sing(){
        print("唱歌")
    }
    // 扩展一个类方法
    class func play() {
        print("")
    }
}
man.sing()
Man.play()

6、闭包

  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C 中的代码块(block)以及其他一些编程语言中的 匿名函数比较相似。
  • 闭包可以捕获和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift 会为您管理在捕获过程中涉及到的所有内存操作。
// MARK: - 闭包
// 求两个数的最大值
/*
在OC中使用Block实现
int (^myBlock)(int num1, int num2) = ^int(int num1, int num2) {
    return num1 > num2 ? num1 : num2;
}
*/
// 使用闭包
var myBlock : ((num1:Int,num2:Int)->Int)
// 第一种使用方式
myBlock = {
    (num1:Int, num2:Int) -> Int in
    return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 3, num2: 6))
// 第二种方式
myBlock = {
    num1,num2 in
    return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 7, num2: 6))
// 第三种方式
myBlock = {
    num1,num2 in
    num1 > num2 ? num1 : num2
}
print(myBlock(num1: 10, num2: 22))
// 第四种方式
myBlock = {
    $0 > $1 ? $0 : $1
}
print(myBlock(num1: 10, num2: 22))
// 第五种方式
myBlock = {
    (num1,num2)->Int in
    return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 99, num2: 66))
  • 闭包传值:
    // 在第二个视图控制器创建返回按钮
    var block = {
        (str:String)-> Void in
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // 创建返回按钮
        let button: UIButton = UIButton(frame: CGRectMake(10,100,50,50))
        button.addTarget(self, action: Selector("buttonAction"), forControlEvents: UIControlEvents.TouchUpInside)
        button.setTitle("返回", forState: UIControlState.Normal)
        button.backgroundColor = UIColor.c
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS 疑难杂症— — 收到推送显示.. 下一篇CoreLocation 定位

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目