1. 程式人生 > >[Xcode10 實際操作]八、網路與多執行緒-(18)PerformSelector訊息處理方法:由執行時系統,負責去呼叫物件的指定方法

[Xcode10 實際操作]八、網路與多執行緒-(18)PerformSelector訊息處理方法:由執行時系統,負責去呼叫物件的指定方法

本文將演示PerformSelector訊息處理方法。
在專案資料夾上點選滑鼠右鍵彈出檔案選單。
【New File】->【Swift File】->【Next】->【Save As】:iOSApp.swift->【Create】
現在開始編寫程式碼,建立Swift類【iOSApp.swift】

 1 import Foundation
 2 
 3 //建立一個繼承自基礎物件的類
 4 class IOSApp: NSObject{
 5     //給類新增一個無參方法,
 6     @objc func printInformation()
 7     {
8 //在控制檯列印輸出日誌 9 print("Interactive Tutorials for Xcode") 10 } 11 //給類新增一個含參方法, 12 @objc func buyApp(_ app:String) 13 { 14 //在控制檯列印包含輸入引數的日誌 15 print("Buy the app:\(app)") 16 } 17 }

在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】

 1 import UIKit
2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 //初始化上文建立的IOSApp類物件 10 let app = IOSApp() 11 //判斷物件是否存在,以某個名稱命名的方法
12 if(app.responds(to: Selector(("printInformation")))) 13 { 14 //然後呼叫物件的指定方法, 15 //這種方法的呼叫方式,是由執行時系統,負責去找對應的方法, 16 //在編譯時不做任何校驗。 17 app.perform(Selector(("printInformation"))) 18 } 19 20 //判斷物件是否存在,以某個名稱命名的方法 21 if(app.responds(to: Selector(("buyApp:")))) 22 { 23 //使用同樣的方式,執行帶有引數的方法,並傳遞相關的引數。 24 app.perform(Selector(("buyApp:")), with: "Excel interactive tutorials") 25 //在執行某個方法時,還可以增加延遲執行的功能。 26 app.perform(Selector(("buyApp:")), with: "Photoshop tutorials", afterDelay: 2) 27 } 28 } 29 30 override func didReceiveMemoryWarning() { 31 super.didReceiveMemoryWarning() 32 // Dispose of any resources that can be recreated. 33 } 34 }