1.方法簡介swift
方法是和類,結構體,枚舉相關聯的函數,放到內部的叫方法,外面的叫函數,與oc不一樣,在swift中,類,結構體,枚舉都能定義方法。ide
swift方法能夠分爲實例方法和類型方法,實例方法必須經過實例才能訪問,類型方法能夠經過類名稱就可以訪問。函數
2.實例方法spa
func f2(){//叫函數orm
print("-----")it
}class
struct Point {變量
var x:Int方法
var y:Intim
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()//f1與f2是並列的,能夠調用外部的變量和方法
}
}
//實例都有本身的一份拷貝
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:2,b1:3,c1:4)//f1中a,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")
}//實例方法能夠被重寫
}