从Objective C调用Swift中定义的NSString扩展

时间:2017-08-28 13:20:35

标签: ios objective-c swift string nsstring

我有一个String扩展程序,我想在NSString objective c上使用它。由于swift中的Stringstruct,因此不会向objective c公开。因此,为了从objective c调用它,我在同一文件中的extension上定义了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()
        }
}

以上两个扩展名位于同一个文件String+Extension.swift中。然后我尝试使用htmlAttributedStringWithFont

从我的objective c班级调用NSString方法
[str htmlAttributedStringWithFont:[UIFont systemFontSize]];

它给了我以下错误

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

我知道如何在String Swift Objective c NSString中使用 Person food Amount Mike Butter 3 Mike Milk 4 Mike Chicken 2 Tim Milk 4 John Chicken 2 扩展程序

1 个答案:

答案 0 :(得分:0)

  1. 如果你在同一个项目中处理Swift和Objective-C文件,那么有一个名为 YourProjectName-Swift.h 的文件,它是由xCode自动创建的。
  2. 假设您刚刚创建或更新了Swift扩展程序。
  3. 这应该自动更新 YourProjectName-Swift.h 然后通过在Objective-C类中导入此头文件( #import&#34; YourProjectName-Swift.h&#34; ),您可以 使用Swift代码。
  4. 以防万一,如果它没有,那么你可以手动 更新此头文件。