2016-08-24 15 views
0

リストを作成しようとしています< T> NSCopyingに準拠しています。理由はありません。レルムを作成できませんリスト<T>はNSCopyingに従います

  1. @objcは、汎用クラスの拡張機能ではサポートされていません。
  2. 最終的なクラスであるため、リストを継承することはできません。
  3. "public func copy(with zone:NSZone?= nil) - >" Any without Marking NSCopying "を実装している場合。私はエラーを取得する:
ので

一覧< T>内のコピー()はありますが、私たちは本当にそれを使用することはできません「... copyWithZoneは::]認識されていないセレクタはインスタンスに送信さ」。

現在、私はリスト< T>の外側で反復を使用してコピーを作成する必要があります。私は単純にinstanceOfList.copy()を使用することはできません。

答えて

1

List<T>をObjective-Cの汎用コンテキスト内でコピーしようとしている場合を除き、コピーメンバー関数で拡張するためにNSCopyingに準拠させる必要はありません。 NSCopyingは純粋なSwiftで使用するのにはあまり意味がないレガシープロトコルです。それはクラスにバインドされており、非常にいい型のシグネチャを持っていません。

NSCopyingを純粋なSwiftの汎用コンテキストで使用する場合は、独自のCopyableプロトコルと拡張タイプを定義することを検討してください。 @objcではないので、あなたは大丈夫でしょう。すでにNSCopyingに準拠している既存のタイプには、Copyableにも準拠する拡張機能が必要ですが、ロジックをNSCopyingの拡張子にすることができます。今

import Foundation 

protocol Copyable { 
    mutating func copy() -> Self 
} 

extension NSCopying { 
    func copy() -> Self { 
     return copy(with: nil) as! Self 
    } 
} 

extension MyTypeThatConformsToNSCopying: Copyable { } 

あなたはNSCopyingList<T>に準拠しようとしている可能性がありますなぜ、私は少し興味があります。リストの管理されていないコピーをお探しですか? を使用してListからArrayを得ることができます。

+0

はい。私は管理されていないコピーを作ろうとしていました。私が最初にNSCopyingを実装したかった理由は簡単でした。すでにNSObjectから継承されたcopy()がありました。 –

関連する問題