0
NSString
からobjective c
に使用したいString
拡張があります。スウィフトのString
はstruct
なので、objective c
には公開されません。ですから、私はobjective c
からそれを呼び出すために、extension
をNSString
に同じファイルで定義しました。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
私はデフォルトの引数を持つ関数はobjcに公開されていないと考えています。 '@objc func htmlAttributedStringWithFont(font:UIFont、size fontSize:CGFloat = 17.0) - > NSAttributedString?'を実行し、エラーを返すかどうかチェックしてください。 – Adamsor
まだ同じエラーです。 – Madu
https://stackoverflow.com/questions/27097688/can-objective-c-code-call-swift-extension-on-class swift/xcodeのように見えるので、obj-cヘッダーをインポートする必要があります。 – solenoid