我正在尝试将此VC内部的功能转换为扩展内的功能(因为我需要在多个VC中访问它,因此我试图返回attributedStringWithRtf,以便可以在其他地方使用它。
func populateTextViewWithCurrentScene() {
let fileURL = getFileURL()
do {
let attributedStringWithRtf:NSAttributedString = try NSAttributedString(
url: fileURL,
options: [.documentType: NSAttributedString.DocumentType.rtf],
documentAttributes: nil
)
self.textViewOutlet.attributedText = attributedStringWithRtf
}
catch {
print("failed to populate text view with current scene with error: \(error)")
}
}
到目前为止,我已经按照How could I create a function with a completion handler in Swift?的指南进行了尝试,并且还尝试了在函数之前声明var的版本。我在下面遇到的错误是无法调用非函数类型'NSAttributedString'的值。
我知道关于这种事情有很多问题,但是很多问题是针对旧版本的Swift
func populateTextViewWithCurrentScene(rtfString: NSAttributedString) -> Void {
let fileURL = getFileURL()
do {
let rtfString:NSAttributedString = try NSAttributedString(
url: fileURL,
options: [.documentType: NSAttributedString.DocumentType.rtf],
documentAttributes: nil
)
}
catch {
print("failed to populate text view with current scene with error: \(error)")
}
rtfString()
}
答案 0 :(得分:3)
我继续创建了extension
的{{1}},它应该提供您想要的内容。每行都包含注释,以解释我所做的决定。
如果某些部分不清楚或无法正常工作,请随时发表评论。
UIViewController
这是根据您和rmaddy的以下评论建立的。
正如我最初的评论中所提到的那样,解决方案不是合并try&return,只是为了简化代码。
您可以通过以下方式查看该函数:
”“我想尝试打开位于
import UIKit // You mentioned wanting to extend your viewcontroller // so I extend UIViewController to support that extension UIViewController { // Returns an optional NSAttributedString, based upon successfully loading the file contents func loadString() -> NSAttributedString? { do { // Everything is cleaned up into a single return command, // including the getFileURL, which can be used as a parameter instead // of creating a variable for it return try NSAttributedString(url: getFileURL(), options: [.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil) } catch { // If this fails, use your existing print command print("failed to populate text view with current scene with error: \(error)") // and then return nil to indicate that nothing was loaded return nil } } }
的文件,然后 想要使用我通过getFileURL()
参数指定的一些选项。 由于此操作可能失败,因此Xcode使我使用options:
。 假设此文件已成功打开,则返回 内容以try
的形式返回给呼叫者。 但是,如果失败,请打印一条消息,告诉我为什么失败 然后返回NSAttributedString
表示没有数据返回。”