2

Swift 4.1 では、弱いプロパティはprotocolで非推奨になりました。これは、コンパイラが強制する方法がないためです。プロパティのメモリ動作を定義するのは、プロトコルに準拠するクラスの責任です。

@objc protocol MyProtocol {
  // weak var myProperty: OtherProtocol /* Illegal in Swift 4.1 */
  var myProperty: OtherProtocol? { get set }
} 
@objc protocol OtherProtocol: class {}

MyProject-Swift.hただし、これは強力なプロパティとしてエクスポートされます。

@protocol MyProtocol
@property (nonatomic, strong) id <OtherProtocol> _Nullable myProperty;
@end

そして今、適合クラスがObjective-Cで書かれているときに問題があります:

@interface MyClass: NSObject<MyProtocol>
@property (nonatomic, weak) id <OtherProtocol> myProperty;
@end

エラー状態retain (or strong)' attribute on property 'myProperty' does not match the property inherited

どうすればこれを解決できますか?

4

2 に答える 2