Swift 中使用runtime交換方法實現

2021-07-16 14:59:52 字數 666 閱讀 6541

在swift的viewcontroller中寫了如下**:

func

first ()

func

second ()

override

func

viewdidload()

執行結果:第乙個方法。發現沒有達到我們預期的目的,同樣的**用oc實現如下:

-(void

) first -(

void

) second

- (void

)viewdidload

執行結果:第

second

個方法。達到了我們預期的目的。為什麼在swift中方法交換失敗了呢,試著把上面方法交換的**放在

因為在swift**中已經沒有了objective-c的執行時訊息機制, 在**編譯時即確定了其實際呼叫的方法. 所以純粹的swift類和物件沒有辦法使用runtime, 更不存在method swizzling. 那是不是在swift中就不能使用runtime了呢?答案肯定是可以的。要使用runtime,我們需要在想要使用runtime的方法或者屬性前面加上dynamic關鍵字。

在swift中使用執行緒休眠

c 和php都有sleep讓執行緒休眠指定時間後再繼續執行後面的 swift中應該如何呢?首先,找一下objective c版本是怎麼做的 self performselector selector didtimeout withobject nil afterdelay 60 順便演示下取消 ns...

Swift中使用protocol的注意事項

oc中protocol是用weak和assign修飾的弱引用.swift中protocol功能被增強了,如果使用以下 就會變成強引用.protocol testdelegate class test nsobject testdelegate static func test deinit clas...

swift中使用Codable協議實現json解析

typealias codable decodable encodable 它其實另外兩個 protocol 的集合,也就是 decodable 和 encodable。乙個用作資料解析,另乙個用作資料編碼。建立乙個實體類,只宣告幾個屬性,將它例項編碼為json字串 struct person co...