NSAttributed String缺少返回值

时间:2019-06-04 15:53:15

标签: ios swift

我正在尝试将此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()
}

1 个答案:

答案 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表示没有数据返回。”