2017-09-25 55 views
3

我在斯威夫特文件中的一個初始化方法如下圖所示:如何調用多個PARAM斯威夫特初始化方法的目標C

public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) { 
     self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE 
     self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR 
     self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING 
     super.init(frame: frame) 
     isHidden = true 
    } 

我想打電話從我的Objective-C的文件,這種方法,但它拋出錯誤同時編譯。

錯誤:

/用戶/桌面/舊 數據/ ChatScreenViewController.m:396:92:爲 'NVActivityIndi​​catorView' 不 可見@interface聲明選擇 「initWithFrame:方法類型:顏色:填充:」

的OBJ-C調用代碼:

NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10] 

我試了一下:

新增@objc我迅速類

@objc public final class NVActivityIndicatorView: UIView 

仍可無法訪問上述方法。

我斯威夫特文件:NVActivityIndicatorView.swift

任何想法什麼問題呢?

謝謝提前!

+0

請分享錯誤。 – KDeogharkar

+0

增加了更多的細節,請檢查我更新的答案。 – CodeChanger

+0

如果我沒有記錯,這個問題的原因將會是在init中使用默認參數值。請刪除該默認值並給它一個鏡頭。它應該工作。 – iamyogish

回答

1

可訪問和在Objective-C可用的,一個夫特類必須是一個Objective-C類的 後代或它必須被標記@objc。

而且這個answer

This apple doc也會幫助你理解。

因此,您的選擇是從某個Objective C類繼承您的類(在這種情況下,編譯器會添加@objc)或將@objc自己添加到您的類中。

您還需要添加到您的目標C接收機類

#import "<#ProjectName#>-Swift.h" 

真正解決這個具體問題

請看this question,您將自己得到您的解決方案。 :)

這個問題說optional parameters不能從Swift暴露給Objective C,因爲所有參數變成_Nonnull

所以我認爲你需要創建一個沒有可選項,並默認參數初始化另一個。

+0

是尼基爾正確的,我已經添加@objc在我的課,但仍然無法訪問上面提到的方法。 – CodeChanger

+0

是的,我有d一個,但仍然無法訪問該方法:( – CodeChanger

+0

完美我創建了一個沒有可選的方法和它的工作,非常感謝您對我的問題的研究。 – CodeChanger

0

嘗試在構建階段添加@objc到Swift類 - >編譯源並再次調用該方法。我希望這會起作用。

+0

是的,我已經嘗試過@objc但沒有成功:( – CodeChanger

+0

可以顯示類,你要定義init方法 –

+0

我已經加入我的快捷文件請一次檢查 – CodeChanger

0
  1. 嘗試也添加@objc給該函數:

    @objc公共的init(幀:的CGRect,類型:NVActivityIndi​​catorType =零,顏色:?的UIColor =零,填充:CGFloat的=零){

  2. 你需要創建一個橋接報。見 https://medium.com/ios-os-x-development/swift-and-objective-c-interoperability-2add8e6d6887

+0

它不允許由於這個原因'方法不能標記@objc因爲參數4的類型不能在Objective-C' – CodeChanger

+0

表示於是嘗試改變參數4到非可選,並刪除它的默認值。看看是否有幫助。 – Roee84

相關問題