2016-10-20 8 views
0

Swift 3への変換後、Obj-Cからの可視性に問題があります(実行時にInterface Builderがコントローラクラスを検出できません)。だから私は、デバッグに@objcを追加しました:Swift 3:非ジェネリッククラスがgenericであるとXcodeが主張しています

@objc(ASSitesTableViewController) 
class ASSitesTableViewController : GenericFRCTableVC<Site> 

とXcodeが戻ってくれる:彼らは目的から直接見ることができないので、「@objc」クラスは属性「@objc」明示的なを持つことができませんの

ジェネリックサブクラス-C

しかし、このクラスは実際には一般的ではありません。それは専門化されたクラスから継承するだけです。

特殊タイプをサブクラス化することは、Swiftの以前のバージョンではサポートされていないため、長時間にわたることですが、苦情なしでコンパイルしました。私はクラスがになることを期待していなかったジェネリック。

スウィフトドキュメントの継承セクションにはジェネリックスの言及がなく、その逆もありませんでした。

サブクラスがObj-Cから見えるようにするために基本クラスが非総称でなければならないのですか?

答えて

2

サブクラスがObj-Cから見えるようにベースクラスが非総称である必要はありますか?

はい。サブクラス自体は定義内に汎用的なプレースホルダを持ちませんが、サブクラスはスーパークラスです。 A Dog "は" Quadruped(DogがQuadrupedのサブクラスである場合)です。したがって、このクラスは "GenericFRCTableVC<Site>"です。さて、Objective-CはGenericFRCTableVC<Site>の意味を持たないので、ASSitesTableViewControllerを理解できません。

スウィフト3

に変換した後、私はあなたがスウィフトの以前のバージョンで同じ問題を抱えていただろう見つけることだと思います。私はこれがSwift 3への変換とは関係ないと信じています。

+0

ご確認いただきありがとうございます。 FRC(フェッチされた結果コントローラ)がそのバージョンで汎用化されて以来、スウィフト3のために大きな問題が発生しましたが、私はチェーンを伝播しようとして失敗しました。 – Andreas

+0

私は知っています - 私は新しい輸入ジェネリック薬でいくつかの困難を抱えてきました。しかし、インポートされたジェネリックは、パラメータ化された型で共存していることに注意してください。それは多くの状況で助けることができます。 – matt

+0

すべては?型の安全性を機能よりも破壊するように聞こえますが、その動作のドキュメントは見つかりませんでした。通常の配列はSwift 2まで同様に振る舞いました。https://youtu.be/n9yAJfYjcl4?t=39m6s – Andreas

関連する問題