当前位置: 首页 > 知识库问答 >
问题:

swift函数返回零(返回太早)[重复]

颜修明
2023-03-14

我在ViewDidLoad函数中有一些代码,它将在调用堆栈的末尾设置一个类变量。我试图重构代码,使其成为一个单独的函数,它将返回值,而不是设置类变量。

由于我缺乏swift知识,我不确定哪里出了问题,我的函数似乎返回得太厄尔了,因为我可以在调试器中告诉我,它在ShareURL被设置为PublicURL.AbsoluteString之前跳转到return。

func getShareUrl() -> String? {
    var shareURL: String?
    if let extItem = extensionContext?.inputItems.first as? NSExtensionItem,
      let itemProvider = extItem.attachments?.first as? NSItemProvider,
      itemProvider.hasItemConformingToTypeIdentifier("public.url") {
      itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil) { (url, error) in
        if let publicUrl = url as? URL {
          shareURL = publicUrl.absoluteString
        }
      }
    }
    return shareURL
  }

我还可以在调试器中看到,内部函数在返回主函数后调用。

如何等待内部调用完成后再返回?或者什么是正确的快速方法。

共有1个答案

东郭宏朗
2023-03-14

由于方法ItemProvider.LoadItem(FortypeIdentifier是异步的,因此需要完成

func getShareUrl(completion:@escaping (String?) -> ()) {
    if let extItem = extensionContext?.inputItems.first as? NSExtensionItem,
        let itemProvider = extItem.attachments?.first as? NSItemProvider,
        itemProvider.hasItemConformingToTypeIdentifier("public.url") {
        itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil) { (url, error) in
            if let publicUrl = url as? URL {
                completion(publicUrl.absoluteString)
            } else {
                completion(nil)
            }
        }
    }
}
 类似资料:
  • 我正在尝试使用以下代码在Swift中将base64字符串解码为图像: 不幸的是,变量decodedData的值为nil 通过代码调试,我验证了变量encodedImageData不是零,是正确的编码图像数据(通过使用在线base64到图像转换器验证)。我的问题背后的原因可能是什么?

  • 本文向大家介绍Swift传递和返回函数,包括了Swift传递和返回函数的使用技巧和注意事项,需要的朋友参考一下 示例 以下函数返回另一个函数作为其结果,可以稍后将其分配给变量并调用:            

  • 如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 这个函数总是返回null. t是不被分配与令牌值.有人能帮助请?