2017-08-28 9 views
0

NSStringからobjective cに使用したいString拡張があります。スウィフトのStringstructなので、objective cには公開されません。ですから、私はobjective cからそれを呼び出すために、extensionNSStringに同じファイルで定義しました。Objective CからSwiftで定義されたNSString拡張を呼び出す

public extension NSString { 

     func htmlAttributedStringWithFont(font: UIFont, size fontSize: CGFloat = 17.0) -> NSAttributedString? { 
      let str = self as String 
      return str.htmlAttributedStringWithFont(font: font) 
     } 

    } 



    extension String { 

     /// Converts an HTML String to NSAttributedString 
     /// 
     /// - Returns: NSAttributedString? 
     func htmlAttributedString() -> NSAttributedString? { 
      guard let data = self.data(using: .utf16, allowLossyConversion: false) else { 
       return nil 
      } 
      guard let html = try? NSMutableAttributedString(
       data: data, 
       options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
       documentAttributes: nil) else { return nil } 
      return html 
     } 

     /// returns and NSAttributedString optional from HTML content after applying specific font and size 
     /// 
     /// - Parameters: 
     /// - font: Font to be applied on the returned string 
     /// - fontSize: Size to be applied on the returned string 
     /// - Returns: NSAttributedString? 
     func htmlAttributedStringWithFont(font: UIFont, size fontSize: CGFloat = 17.0) -> NSAttributedString? { 
      let string = self.appending(String(format: "<style>body{font-family: '%@'; font-size:%fpx;}</style>", font.fontName, fontSize)) 
      return string.htmlAttributedString() 
     } 
} 

上記の2つの拡張子は、同じファイルString+Extension.swiftにあります。私はそれは私がObjective c NSString

+0

私はデフォルトの引数を持つ関数はobjcに公開されていないと考えています。 '@objc func htmlAttributedStringWithFont(font:UIFont、size fontSize:CGFloat = 17.0) - > NSAttributedString?'を実行し、エラーを返すかどうかチェックしてください。 – Adamsor

+0

まだ同じエラーです。 – Madu

+1

https://stackoverflow.com/questions/27097688/can-objective-c-code-call-swift-extension-on-class swift/xcodeのように見えるので、obj-cヘッダーをインポートする必要があります。 – solenoid

答えて

0
    から SwiftString拡張子を使用することができますどのように任意のアイデアを次のエラー

    No visible @interface for 'NSString' declares the selector 'htmlAttributedStringWithFont:' 
    

    を与えるNSString

    [str htmlAttributedStringWithFont:[UIFont systemFontSize]]; 
    

    と私のobjective cクラスからhtmlAttributedStringWithFontメソッドを呼び出そうとしました

  1. 同じプロジェクトでSwiftとObjective-Cファイルを処理している場合、特定のYourProjectName-Swift.hと呼ばれ、xCodeによって自動的に作成されます。
  2. 今すぐ作成または更新したSwift拡張があるとします。
  3. このこのヘッダファイル(の#import "YourProjectName-Swift.h")をインポートすることで自動的に その後、YourProjectName-Swift.hを更新する必要があり、あなたのObjective-Cクラスであなたが スウィフトコードを使用することができます。
  4. もしそうでなければ、手動で このヘッダーファイルを更新することができます。
関連する問題