Swift捕获说明符的类型和声明限制

时间:2014-10-25 16:42:40

标签: swift automatic-ref-counting optional

我对Swift 捕获说明符的类型要求和声明限制感到困惑。文档说weak引用必须是var和“可选类型”,并且unowned引用必须是非可选类型。但Apple自己的has examples引用的same as unowned引用声明为选项,而Xcode接口构建器创建unowned(unsafe)个出口和隐式解包的行为(并不总是明确地是“可选类型”)在语言参考)。

每个Swift捕获说明符需要哪些类型?哪个必须是weak,哪个可以是var


FWIW,我认为

  • let可以是weakType?,但不能是Type!;并且必须是Type
  • var({{3}})必须为unowned(safe);并且可能是Type
  • let可以是unowned(unsafe)Type?;并且可能是Type!

但我很不确定。

1 个答案:

答案 0 :(得分:0)

首先是Cocoa or Cocoa touch APIs are imported in swift from objective-c`。它们以最好的方式快速映射。因此两者都可以互操作。

这些unowned(unsafe)属性在ObjC中标记为assign。这些是unsafe,ARC不会保留该对象,并且它不会确保将引用重置为nil if the object is deallocated. These are old apple API and not changed with ARC and remain as分配but you should make委托弱` 不要在swift中寻找最佳实践的标题,他们已经制定了许多技巧来实现快速和客观的互操作性,如果你做了什么标题,那么你将失去所有安全性的快速证据。

你是对的

应该optional自动包含nil如果对象获得解除分配并且没有其他指针保留它

无主(安全)不应该是optional,如果对象处理完毕,则不会重置为nil

无主(不安全)可以是optional,也可以不是nil,因为它不会为ARC提供任何安全措施来处理对象交易,也不会重置为unowned。你应该不要在swift程序中使用它。如果需要,请使用var。它仅用于互操作性。

始终为nil,因为当对象解除分配并设置为var时可以更改。

无主(安全)无主(不安全)可以同时为letoptional,因为它们依赖于您和运行时不会改变这些变量。

注意:你不能在swift程序中声明无主(不安全)assign。它只是为了互操作性而不应该在swift中使用。他们之所以这样,是因为{ {1}}或unretain属性可以是nil