1、定义方法需要在类型(枚举,结构体,类)里定义,不能独立定义,独立定义的是函数
2、方法要么属于该类型本身,要么是该类型的一个实例
3、不能独立执行方法,执行方法必须使用类型或实例作为调用者
注意:枚举、结构体中方法使用static修饰,类中用class修饰,都属于类型方法,否则的话属于实例方法
1 import Foundation 2 3 class SomeClass{ 4 func test(){ 5 println("====test 方法 ======") 6 } 7 class func bar(#msg:String){ 8 println("====bar 方法 ======,传入的参数为:\(msg)") 9 } 10 } 11 //创建实例 12 var sc = SomeClass() 13 //将sc的test方法分离成函数,前面类型用()->()表示函数类型,后面的取方法不能带上() 14 var f1:()->() = sc.test//如果带上括号就是调用实例的方法 15 //将sc的bar方法分离成函数 16 var f2:(String)->Void = SomeClass.bar 17 18 //然后使用f1()就相当于调用的就是sc.test() 19 f1() 20 //然后使用f2()就相当于调用的就是SomeClass.bar(msg:) 21 f2("hello") 22 23 24 //************方法的外部形参名*************// 25 class Person{ 26 var name:String 27 init(name:String){ 28 self.name = name 29 } 30 func eat(food:String, _ drink:String ,cigarette:String){ 31 println("\(self.name)吃着\(food)喝着\(drink)抽着\(cigarette)") 32 } 33 } 34 var p = Person(name: "Tom") 35 p.eat("烤鸭", "啤酒", cigarette: "雪茄") 36 /*Swift默认为除第一个参数外部添加了外部参数名,与局部参数名一样,如果不需要的话,则用_下划线的方式去掉,添加了外部参数名,不是添加了#号*/ 37 38 /************值类型的可变方法*************/ 39 struct JKRect { 40 var x:Int 41 var y:Int 42 var width:Int 43 var height:Int 44 mutating func moveByX(x:Int,y:Int){ 45 self.x += x 46 self.y += y 47 } 48 } 49 var rect = JKRect(x: 20, y: 12, width: 200, height: 300) 50 rect.moveByX(100, y: 90) 51 println("矩形的左上角的x坐标为:\(rect.x),y坐标为\(rect.y)") 52 /*注意:常量类型的结构体,枚举时不可变的*/
运行结果是: