您的位置:首页 > 移动开发 > Swift

Swift语言学习---------高级

2015-11-03 17:03 120 查看
一.结构体.

示例代码:

//*****************结构体(Struct)***************
//1.声明一个结构体
struct rect{
//声明结构体变量成员的属性(存储属性)
var x:Float
var y:Float
var With:Float
var Height:Float

//声明结构体属性
//注意:需要使用Static关键字修饰
static var description:String?

//计算属性(本身不存值,专门用于计算其他属性的值)
var centerX :Float{
//setter方法
set{

x = newValue

}
//getter方法
get{

return x + With/2

}
}

var centerY :Float{

get{

return y;
}

}
//声明方法
//声明一个结构体对象(结构体变量)方法[类似于类中的实例(对象)方法]
func info(){
print("x:\(x) y:\(y) width:\(With) height:\(Height)")

}
//声明结构体方法[类似于类中的类的方法]
static func info1(){
print("这是一个结构体方法")

}

}
//1.根据结构体类型创建结构体对象(结构体变量)
var rect1 = rect(x: 0, y: 0, With: 100, Height: 100)
//注意:如果结构体对象是常量内部的属性是不允许修改的

//访问结构体对象的属性
rect1.x = 20

print(rect1.x)

//访问结构体属相
rect.description = "我是结构体属性"

print(rect.description!)
//访问结构体对象的计算属性
rect1.centerX = 100 //在调用center中的setter方法
let value = rect1.centerX   //在使用centerx的getter方法

//使用结构体对象方法
rect1.info()

//使用结构体方法
rect.info1()


二.类及继承

示例代码:

//类*****************************************
//class Person{
//    var name:String?
//    var age:Int?
//    //构造方法
//    init(name:String, age:Int){
//        self.name = name
//        self.age = age
//    }
//}
//
////创建一个Person对象
//var p1:Person = Person(name: "张三 ", age: 20)
//
////访问类中的属性
//print(p1.name!)
//print(p1.age!)

class Person {
//声明属性
var name:String?
var age:Int?

//声明类属性
static var introduce:String!   //(存储属性)
//声明计算属性(类,结构体,枚举)
var number:Int{
get{

return self.age!
}
set(value){   //这种写法表示在调用number的set方法时传过来的参数赋值给value
age = value   //注意切记setter/getter方法中不能使用self.的形式

}

}

//声明类方法  static修饰时,不能被子类重写   class修饰的可以
static func sayHi(){

print(introduce)
//注意在类方法中不能使用对系那个属性,只能使用类属性

}

class func sayHi2(){

}
//声明构造方法
init(name:String,age:Int){
self.name = name
self.age = age

}
init(name:String){
self.name = name

}
//声明一个对象方法
func sayHello(){
print("我是对象方法")

}

}

//继承
class Student:Person {
//重写父类的类方法
override class func sayHi2(){

print("我是Student类,重写了父类的类方法")

}
}

//
let person = Person (name: "李四", age: 25)
person.sayHello()   //使用对象方法
Person.sayHi2()   //使用的是类方法
Student.sayHi2()  //使用的Student中重写父类的那个方法

//创建Student对象
let  student:Student = Student(name: "小碗", age: 21)

//值类型与引用类型***************************************
//值类型变量
//struct animal {
//
//    var name:String?
//    var age:Int?
//
//
//}
//var dog = animal(name: "小明", age: 2)
//var dog1 = dog   //此时dog1是从dog拷贝过来的值,是一份新值
//dog.name = "小花"
//print("\(dog.name!),\(dog1.name!)")

//引用类型变量

class  animal {

var name:String?
var age:Int?
init(name:String , age:Int){
self.name = name
self.age = age

}

}
var dog = animal(name: "小黄", age: 3)
var dog1 = dog   //此时dog1是从dog拷贝过来的值,是一份新值
dog.name = "小花"
print("\(dog.name!),\(dog1.name!)")


三.协议及扩展.

示例代码:

//协议(protocol)***************************************
//当协议前有可选方法时,该协议前要用关键字@objec修饰,可选实现方法用optional修饰
@objc protocol  MerrayDelegate{

func cook()  //做饭
func wach()  //洗衣服
optional func hitDoudou() //打豆豆

}
protocol DividDelegate{

func lookAfterChild()

}

class Man: Person,MerrayDelegate,DividDelegate {

@objc func cook() {
print("还好学了几年手艺")
}

@objc func wach() {
print("手洗")
}

func lookAfterChild() {
print("看小孩")
}
}
//扩展   (实现代码的分离,不过与臃肿)
extension Man{
@objc func hitDoudou() {
print("打豆豆")
}

}

//
let man:Man = Man(name: "黄海波", age: 40)

man.cook()

man.hitDoudou()

//扩展(extension)**************************************************

//1.扩展一个类遵循的协议的方法的实现
//扩展   (实现代码的分离,不过与臃肿)

//extension Man{
//    @objc func hitDoudou() {
//        print("打豆豆")
//    }
//
//}

//2.扩展一个类的方法(类似于oc中的category类目)
extension Man {
//扩展一个对象方法
func sing(){
print("哈哈")
}
//扩展一个类方法
class func eat() {
print("吃饭")
}
}
man.sing()
Man.eat()


四.闭包

闭包类似于于block函数 ]

注意:闭包的函数体部分由关键字 in 引入。 该关键字表示闭包的参数和返回值类型定义已经完成,
闭包函数体即将开始。

示例代码:

//闭包  相当于block函数
//求两个整型数中的最大值
//第一种方式实现闭包
var maxResult:((a:Int, b:Int) ->Int) = {
//这个函数的类型是(a:Int, b:Int) ->Int

(a:Int,b:Int)->Int in

return a > b ? a : b

}

print(maxResult(a: 3, b: 5))

//第二种方式
maxResult = {
a,b in
return a > b ? a : b

}

//第三种方式
maxResult = {
a,b in
a > b ? a : b

}

//第四种
maxResult = {
$0 > $1 ? $0:$1

}

//第五种
maxResult = {
(a,b) -> Int in
a > b ? a : b
}

print(maxResult(a: 3, b: 5))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: