10--swift之方法

原创
2016/03/09 23:03
阅读数 11

1.方法简介

方法是和类,结构体,枚举相关联的函数,放到内部的叫方法,外面的叫函数,与oc不同,在swift中,类,结构体,枚举都能定义方法。

swift方法可以分为实例方法和类型方法,实例方法必须通过实例才能访问,类型方法可以通过类名称就能够访问。

2.实例方法

func f2(){//叫函数

print("-----")

}

struct Point {

var x:Int

var y:Int

func f1(){//叫方法

print("------")

}

}

//实例

class SomeClass {

var a1:Int!

var s1:String!

func set(a:Int,s:String){

a1 = a

s1 = s

}

func compute(){

let a = [2,3,5,4]

for e in a{

print(e)

}

}


}

var s = SomeClass()

s.set(20, s: "tom")

print(s.a1)

print(s.s1)

s.compute()

//实例

class MyClass {

var v:Int = 100

func f1(){

print("f1")


}

func f2(){

print(v)

f1()//f1f2是并列的,可以调用外部的变量和方法

}

}

//实例都有自己的一份拷贝

class Cat {

var name: String!

var age: Int!

func show(){

print("\(name),\(age)")

}

}

var c1 = Cat()

c1.name = "jale"

c1.age = 2

c1.show()

var c2 = Cat()

c2.name = "kate"

c2.age = 4

c2.show()

//实例

class Dog {

var name: String!

var age: Int!

func eat(){

print("-----")

}

func play(){

print("play")

}

func sleep(){

print("sleep")


}

func all(){

eat()

play()

sleep()

}

func show(){

print("\(name),\(age)")

}

}

var d1 = Dog()

d1.name = "hua hua"

d1.age = 3

var d2 = Dog()

d2.name = "xiao hei"

d2.age = 5

d1.show()

d1.all()

d2.show()

d2.all()

局部参数和外部参数

//name1,age1是内部参数。set方法第一个默认没有外部参数

class Animal {

var name:String!

var age:Int!

func set(name1:String,age1:Int){

name = name1

age = age1


}

func f1(a1 a:Int,b1 b:Int,c1 c:Int ){

let sum = a + b +c

print(sum)

}

func f2(a:Int,_ b: Int,_ c:Int){

let sum = a + b + c

print(sum)

}

func show(){

print("\(name),\(age)")

}

}

var a = Animal()

a.set("hua hua", age1: 3)//在调用时age1是外部参数名,跟内部参数名一样,第一个默认没有外部参数

a.show()

a.f1(a1:2b1:3,c1:4)//f1a,b,c都是内部参数,而a1,b1,c1都是外部参数

a.f2(1,2,3)//参数名前加上下划线,调用时名称可以省略

2.实例——self

class Animal {

var name: String!

var age: Int!

func set(name1: String,age1:Int){

//        name = name1

//        age = age1

self.name = name1

self.age = age1

}

func show(){

print("\(name),\(age)")

}

}

var cat = Animal()


cat.set("nua nua", age1: 3)

cat.show()

var dog = Animal()


dog.set("tom", age1: 4)

dog.show()

3.在实例方法中修改值类型

结构体和枚举是值类型,一般值类型的属性不能在他的实例方法中被修改

但是,可以选择变异(mutating),然后可以从内部改变他的属性

struct Point {

var x:Int!

var y:Int!

//mutating

mutating func set(x1: Int,y1: Int){

//x = x1

//y = y1

self = Point(x: x1,y: y1)

}

}

3.类型方法



//静态方法只能调用静态方法和变量,实例方法可以通过类名称直接调用静态方法和变量

class MyClass {

var i1: Int!

var s1: String!

static var c1: String!

static func f1(){

print("f1..")


}


//f2可以被子类重写

class func f2() {

print("f2..")

}

func f3(){

print("f3")

}


}

MyClass.f1()//可以通过类名称直接调用

class SubClass:MyClass{

override class func f2(){

print("f...f")

}//class 方法可以被重写,但必须加上class

override func f3(){

print("f111")

}//实例方法可以被重写

}


展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部