12578


以下のようなコードから、ヘッダに参照関係があることが分かります。

**A** :import Foundation

[code]

    import Foundation
    
    let randValue = arc4random()    // OK!
    autorelease {                   // OK!
        var today = NSDate()        // OK!
    }
    
[/code]

**B** :import ObjectiveC

[code]

    import ObjectiveC
    
    let randValue = arc4random()    // OK!
    autorelease {                   // OK!
        var today = NSDate()        // NG!
    }
    
[/code]

**C** :import Darwin

[code]

    import Darwin
    
    let randValue = arc4random()    // OK!
    autorelease {                   // NG!
        var today = NSDate()        // NG!
    }
    
[/code]

**D** :pure Swift

[code]

    let randValue = arc4random()    // NG!
    autorelease {                   // NG!
        var today = NSDate()        // NG!
    }
    
[/code]

つまり、`Foundation`をインポートすると暗黙のうちに依存関係にある`ObjectiveC`と`Darwin`もインポートされるのですが、この依存関係を知る方法は存在しますか？


CC BY-SA 3.0
2015-07-22T11:57:19.830
12576
2015-07-22T12:54:03.363
5337
question
swift
Swiftにおけるヘッダの依存関係を知る方法


xcode上で`import Foundation`を右クリックして`Jump to
Definition`を実行すれば依存関係をたどることは可能ですが、階層が深いので一筋縄ではいきません。

あまり分かりやすい形ではありませんが、実行可能ファイルにリンクされているライブラリを調べれば、間接的に依存関係が分かります。

[code]

    import Foundation
    
    println("Hello, World!")
    
[/code]

[code]

    $ xcrun swiftc main.swift -F /System/Library/Frameworks/ -I /usr/include/
    $ otool -L main
    main:
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
        @rpath/libswiftCore.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftCoreGraphics.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftDarwin.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftDispatch.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftFoundation.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftObjectiveC.dylib (compatibility version 0.0.0, current version 0.0.0)
        @rpath/libswiftSecurity.dylib (compatibility version 0.0.0, current version 0.0.0)
    
[/code]

`libswiftCore.dylib`だけは`Foundation`をインポートしなくてもリンクされるようです。  
つまり、`Foundation`をインポートすると以下のモジュールもインポートされていることになります。

  * CoreGraphics 
  * Darwin 
  * Dispatch 
  * ObjectiveC 
  * Security


CC BY-SA 3.0
2015-07-22T12:46:06.400
12578
2015-07-22T12:54:03.363
2015-07-22T12:54:03.363
3639
3639
12576
answer