当前位置: 首页 > 面试题库 >

如何在Swift 2.0中使用防护来“增强”可选的自我

华升
2023-03-14
问题内容

关于如何/ 自我,有一个类似的问题,可以回答,但是我想知道如何使用“自我”而不会由于以下原因导致向右漂移:weakify``strongify``if let

Welcome to Apple Swift version 2.0 (700.0.59 700.0.72). Type :help for assistance.
  2> import Foundation
  3> class Foo {
  4.     func guardOptSelf() -> () throws -> Void {
  5.         return { [weak self] in
  6.             guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }
  7.             self.doSomethingNonOptionalSelf()         
  8.         }
  9.     }
  10. }
repl.swift:6:19: error: pattern matching in a condition requires the 'case' keyword
            guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }
                  ^
                  case
repl.swift:6:23: error: binary operator '~=' cannot be applied to two 'Foo?' operands
            guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }

问题答案:

可以 影子self; 您只需要反引号即可表明“您知道自己在做什么”。例如:

foo.doSomethingAsyncWithBar(bar) { [weak self] result in
    guard let `self` = self else { return }
    self.receivedResult(result)
}

或者,在您的示例中:

2> import Foundation
3> class Foo {
4.     func guardOptSelf() -> () throws -> Void {
5.         return { [weak self] in
6.             guard let `self` = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }
7.             self.doSomethingNonOptionalSelf()         
8.         }
9.     }
10. }


 类似资料:
  • Java Docs说Java Docs 公共类BufferedReader扩展阅读器 但是通过挂钩Filereader,我们使用Filereader的读取方法来读取一次读取一个字符的文件,所以如果我的文件包含2000个字符,Filereader首先会一次读取2000个字符,并将其转移到缓冲区,我们将使用bufferedreader从缓冲区读取,那么它如何提高性能?我们可以只用Filereader来

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚

  • 我有一个场景,我需要使用增强现实绘制基于地理定位的3D对象。例如,在增强现实中,需要考虑方向、高度、摄像机方向等所有参数,从a点到B点绘制一条路径,从a点到B点绘制三维线。我可以在这个上下文中使用vuforia SDK吗。

  • 问题内容: 我知道使我们的类不可变的所有基本规则,但是当有另一个类引用时,我有点困惑。我知道是否有集合而不是集合,然后我们可以利用它,然后使我们的类不可变。但是在下面的情况下,我仍然无法理解这个概念。 问题答案: 好吧,这个概念是阅读并了解JLS。在这种情况下,JLS说: final字段还允许程序员无需同步即可实现线程安全的不可变对象。即使所有线程都使用数据竞争在线程之间传递对不可变对象的引用,线

  • 我有一个使用Camel jetty组件作为网关的带有Camelendpoint路由的Spring Boot应用程序。 } 如果我将jetty组件放在端口8085中执行,那么一切都可以正常工作。 我试图跟踪这场讨论 使用Spring Boot中的现有http服务器作为骆驼endpoint 但我得到了下面的错误,因为我有两个Jetty运行在同一个端口上 我使用的是Camel-Jetty2.18.0一个

  • 我做了自动增量索引: 然后我尝试在id字段中传递nil: 当我尝试插入此值时,我发现错误: 自动增量字段必须传递什么值? 第二个问题。如果我使用tarantool集群,实例很少(例如,基于盒式磁带的应用程序),那么它是否会使用自动增量索引?在不同的实例上是否会出现重复密钥的情况?