[英]4 Questions about Selectors in Swift
對不起,這些問題
我在swift中有4個關於Selector的問題。
第一個問題
我想知道在swift中使用selector的正確方法是什么
closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: Selector("closeBarButtonItemClicked:"));
VS
closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Stop, target: self, action: "closeBarButtonItemClicked:");
我們應該立即使用Selector(“methodName:”)或“methodName:”嗎?
兩種方式都有效但哪一種方法正確?
第二個問題
我們如何在Swift中使用參數調用函數? 假設我想調用這樣的函數
func methodName(parameterOne : String, parameterTwo: String)
第三個問題
我們如何在swift中使用Selector調用類型方法? 甚至可能嗎?
class SomeClass {
class func someTypeMethod() {
// type method implementation goes here
}
}
第四個問題
在Selector中函數名后面的冒號的目的是什么?
@ ad121的答案很棒 - 只想在#1中添加一些上下文:
Selector
類型已在Swift中擴展為StringLiteralConvertible
。 每當需要Selector
實例時,您可以改為給出一個字符串文字,並為您創建一個Selector
實例。 這意味着您還可以手動從字符串文字創建Selector
實例:
let mySelector: Selector = "methodName:withParameter:"
請注意,這並不意味着String
可以與Selector
交替使用 - 這只適用於字符串文字。 以下將失敗:
let methodName = "methodName:withParameter:"
let mySelector: Selector = methodName
// error: 'String' is not convertible to 'Selector'
在這種情況下,您需要自己實際調用Selector
構造函數:
let methodName = "methodName:withParameter:"
let mySelector = Selector(methodName)
問題1:我認為沒有一個正確的方法。 我個人更喜歡第二種方式,但兩者都有效,所以我認為這不重要。
問題2:我剛讀過你的問題。 我認為你的意思是如何在選擇器中調用它。 我相信的選擇器將是"methodName:parameterTwo:"
但我不是肯定的,因為具有兩個參數的選擇器可能應該有一個外部參數名稱放在選擇器中,其中parameterTwo在我的答案中。
舊問題2答案(編輯之前):您將該函數稱為methodName(variable1, parameterTwo: variable2).
如果你想讓它們在調用中說出參數名,你可以使用header methodName(calledVarName parameterOne: String, calledVarName2 parameterTwo: String)
。 這將被稱為methodName(calledVarName: variable1, calledVarName2: variable2)
。 您還可以將標頭定義為methodName(#parameterOne: String, #parameterTwo: String)
。 這將被稱為methodName(parameterOne: variable1, parameterTwo: variable2)
。 在此處閱讀更多內容: https : //developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
問題3:我不能肯定地說,但我認為沒有辦法為此制作一個選擇器。 如果有,我認為它將是“someTypeMethod”
舊問題3答案(編輯之前):您可以通過SomeClass.someTypeMethod()
調用此方法。
問題4:冒號表示函數頭有參數。 因此"function1:"
對應於func function1(someParameterName: AnyObjectHere)
而"function1"
對應於func function1()
。
回答你的第3個問題:你完全可以做到這一點。 只需將目標參數設置為類型本身即可。
假設您定義了一個類:
class SomeType {
class func someMethod() {}
func someMethod() {}
}
現在舉個例子,這將調用實例方法:
let something = SomeType()
let closeBarButtonItem = UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.Stop, target: something, action: "someMethod")
更改目標,呼叫將轉發到類型:
let closeBarButtonItem = UIBarButtonItem(barButtonSystemItem:UIBarButtonSystemItem.Stop, target: SomeType.self, action: "someMethod")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.