第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

什么是Swift等效的respondsToSelector?

什么是Swift等效的respondsToSelector?

素胚勾勒不出你 2019-08-26 15:07:32
什么是Swift等效的respondsToSelector?我用谷歌搜索,但無法找出快速等同于什么respondsToSelector:。這是我唯一能找到的東西(Swift替代respondsToSelector :)但在我的情況下并不太重要,因?yàn)樗鼨z查委托的存在,我沒有委托我只想檢查是否存在新的API或者不在設(shè)備上運(yùn)行時(shí),如果沒有回到以前版本的api。
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

更新Swift 3語法:

如果您不關(guān)心是否存在可選方法,只需調(diào)用即可 delegate?.optionalMethod?()

否則,使用guard可能是最好的方法:

weak var delegate: SomeDelegateWithOptionals?func someMethod() {
    guard let method = delegate?.optionalMethod else {
        // optional not implemented
        alternativeMethod()
        return
    }
    method()}

原始答案:

您可以使用“if let”方法測試這樣的可選協(xié)議:

weak var delegate: SomeDelegateWithOptionals?func someMethod() {
  if let delegate = delegate {
    if let theMethod = delegate.theOptionalProtocolMethod? {
      theMethod()
      return
    }
  }
  // Reaching here means the delegate doesn't exist or doesn't respond to the optional method
  alternativeMethod()}


查看完整回答
1 反對 回復(fù) 2019-08-26
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

如上所述,在Swift中,大多數(shù)情況下,您可以使用?可選的unwrapper運(yùn)算符實(shí)現(xiàn)所需的功能。這允許您在對象上調(diào)用方法,當(dāng)且僅當(dāng)對象存在(而不是nil)并且方法已實(shí)現(xiàn)時(shí)。


在您仍然需要的情況下respondsToSelector:,它仍然作為NSObject協(xié)議的一部分。


如果您respondsToSelector:在Swift 中調(diào)用Obj-C類型,那么它的工作方式與您期望的相同。如果您在自己的Swift類中使用它,則需要確保您的類派生自NSObject。


這是一個(gè)Swift類的示例,您可以檢查它是否響應(yīng)選擇器:


class Worker : NSObject

{

    func work() { }

    func eat(food: AnyObject) { }

    func sleep(hours: Int, minutes: Int) { }

}


let worker = Worker()


let canWork = worker.respondsToSelector(Selector("work"))   // true

let canEat = worker.respondsToSelector(Selector("eat:"))    // true

let canSleep = worker.respondsToSelector(Selector("sleep:minutes:"))    // true

let canQuit = worker.respondsToSelector(Selector("quit"))   // false

重要的是不要遺漏參數(shù)名稱。在這個(gè)例子中,Selector("sleep::")是不一樣的Selector("sleep:minutes:")。


查看完整回答
反對 回復(fù) 2019-08-26
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒有真正的Swift替代品。

您可以通過以下方式辦理登機(jī)手續(xù):

someObject.someMethod?()

someMethod只有在對象上定義了方法,才會(huì)調(diào)用該方法,someObject但只能將其用于@objc已聲明方法的協(xié)議optional。

Swift本質(zhì)上是一種安全的語言,所以每當(dāng)你調(diào)用一個(gè)方法時(shí),Swift必須知道方法就在那里。無法進(jìn)行運(yùn)行時(shí)檢查。你不能只對隨機(jī)對象調(diào)用隨機(jī)方法。

即使在Obj-C中你也應(yīng)該盡可能避免使用這些東西,因?yàn)樗cARC不能很好地結(jié)合(ARC會(huì)觸發(fā)警告performSelector:)。

但是,在檢查可用的API時(shí)respondsToSelector:,即使是Swift,如果要處理NSObject實(shí)例,仍然可以使用:

@interface TestA : NSObject- (void)someMethod;@end@implementation TestA//this triggers a warning@end


var a = TestA()if a.respondsToSelector("someMethod") {
   a.someMethod()}


查看完整回答
反對 回復(fù) 2019-08-26
  • 3 回答
  • 0 關(guān)注
  • 2154 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號