10. So, can we live in a pure Swi0
world?
@TachibanaKaoru, 2015 10
11. Unusable Swi- features in ObjC (1)
• Generics
• Tuples
• Enumera0ons defined in Swi7 without Int raw value type
• Structures defined in Swi7
• Top-level func0ons defined in Swi7
• Global Variables defined in Swi7
@TachibanaKaoru, 2015 11
12. Unusable Swi- features in ObjC (2)
• Typealiases defined in Swi0
• Swi0-style variadics
• Nested types
• Curried func:ons
• Protocol Extension (new from Swi02.0)
@TachibanaKaoru, 2015 12
13. These are not only unusable from ObjC
• これらの Swi&独自機能は「Objec,ve-Cからよべない」だけで
はない
• 実は、pure Swi& の project でもこの制限がかかる
@TachibanaKaoru, 2015 13
14. We cannot use them as a selector
• Objec've-Cでよべないものはselectorで指定することができな
い
• performselector 指定することもできない。
• Add-Target 指定することもできない。
@TachibanaKaoru, 2015 14
19. We cannot use Swi.-only features as a
selector
• 「Objec've-Cからよべないもの」は、selectorに指定できない
@TachibanaKaoru, 2015 19
20. What "usable from ObjC" means?
• 「Objec've-Cからよべる」とは?
• Swi. Compile 時に作成される Objec've-C member table に
入っているかどうか
@TachibanaKaoru, 2015 20
21. Objec&ve-C member table
• h#ps://github.com/apple/swi5/blob/master/lib/AST/
NameLookup.cpp
void ClassDecl::createObjCMethodLookup() {
assert(!ObjCMethodLookup && "Already have an Objective-C member table");
auto &ctx = getASTContext();
ObjCMethodLookup = new (ctx) ObjCMethodLookupTable();
// Register a cleanup with the ASTContext to call the lookup table
// destructor.
ctx.addCleanup([this]() {
this->ObjCMethodLookup->destroy();
});
}
@TachibanaKaoru, 2015 21
22. Is this method "usable
from ObjC" ?
• 実装時に、特定のメソッドが
Objec've-Cから使えるのかどうか確認
するのであれば、MyProject-Swi4.hで
確認しましょう
• ビルド時に中間生成物として作成さ
れています
• Xcodeでは右の方法で見ることがで
きます
@TachibanaKaoru, 2015 22