gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:12:09 26 4
gpt4 key购买 nike

我有一个 String 扩展,我想在 objective cNSString 上使用它。由于 swift 中的 String 是一个 struct,因此它不会暴露给 objective c。因此,为了从objective c调用它,我在同一文件中的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中。然后,我尝试使用 NSString

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

它给了我以下错误

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

知道如何在Swift中使用来自Objective c NSStringString扩展

最佳答案

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

关于ios - 从 Objective C 调用 Swift 中定义的 NSString 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com