簡體   English   中英

如何使用嵌套函數執行選擇器?

[英]How to perform selector with a nested function?

我有一個這樣的嵌套函數,我想在用戶點擊我的按鈕時調用childFunc ,但是它不起作用

class MyClass {
    func parentFunc() {
        button.addTarget(self, action: #selector(parentFunc().childFunc), for: .touchUpInside)
        func childFunc() {
            print("User tapped")
        }
    }
}

它會引發如下錯誤:

Value of tuple type '()' has no member 'childFunc'

有沒有什么辦法來執行childFunc#selector

編輯1:我有這樣的閉包,但我認為這不是一個好方法,因為我必須做另一個函數

class MyClass {
    myClosure: () -> () = {}
    func parentFunc() {
        button.addTarget(self, action: #selector(runChildFunc), for: .touchUpInside)
        func childFunc() {
            print("User tapped")
        }
        myClosesure = childFunc

    }
    func runChildFunc() {
        myClosure()
    }
}

相反,您可以嘗試以下代碼以實現您的目標

class MyClass {
    let button = UIButton()

   @objc public func parentFunc(_ sender : UIButton?) 
      {

        func childFunc() {
         print("User tapped")
        }

        if sender != nil && sender.tag == 100{
        childFunc()
        return
        }

        button.addTarget(self, action: #selector(parentFunc(_:)), for: .touchUpInside)
        button.tag = 100
       }
    }

在上面的代碼中,Sender是可選的,因此當您不想調用諸如parentFunc(nil)類的parentFunc(nil)時,可以傳遞nil

有什么方法可以使用#selector執行childFunc

否。整個想法沒有任何意義。 請記住,嵌套(內部)函數實際上並不存在 它只是開始存在,瞬間, 當外FUNC運行 外部函式的運行在遇到定義時將內部函式變為現實,並將其有效地存儲在局部變量中,以便可以從函式內部作用域中的后續代碼中調用它。 與任何局部變量一樣,當外部函數代碼結束時,內部函數將不再存在。 另外,因為它是函子內部的局部變量,所以它的作用域被設置為即使從概念上講也無法從外部調用它,就像不能從函子中看到函子內部的局部變量一樣。在FUNC外,即使概念是有意義的。

選擇器必須指向類實例的方法 (該類從NSObject派生)。 這是一個Cocoa Objective-C架構; 您必須遵守Objective-C規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM