web-dev-qa-db-ja.com

Swiftでプログラム引数にアクセスするにはどうすればよいですか?

Cおよび派生物には、エントリポイント関数へのargcおよびargv(およびenvp)パラメータがありますが、Swiftには適切なものがありません:トップレベルコードは単なるコードであり、パラメーターはありません。

Swiftプログラムでargcおよびargvと同等のものにアクセスするにはどうすればよいですか?

36
zneak

Processは、CommandLine(Swift 3.0 8月4日のスナップショット)

let arguments = CommandLine.arguments

(何らかの理由で、これは changelog で言及されていませんでした)

45
ambientlight

Process.arguments あなたの友だちです!

幸いなことに、これははるかに簡単で、組み込まれています:何もインポートせず、C、客観的、またはその他の方法で手を汚しません。

これを考慮して、args.Swift

Swift 2バージョン:

var c = 0;
for arg in Process.arguments {
    println("argument \(c) is: \(arg)")
    c++
}

Swiftバージョン:

var c = 0;
for arg in CommandLine.arguments {
    print("argument \(c) is: \(arg)")
    c += 1
}

次のようにコンパイルして実行できます。

$ Swift -o args args.Swift && ./args fee fi fo fum
argument 0 is: ./args
argument 1 is: fee
argument 2 is: fi
argument 3 is: fo
argument 4 is: fum

ご想像のとおり、最初の引数はプログラム名です。

ご想像のとおり、すべての引数は文字列のようです。

ProcessがSwift=が成熟するにつれてより便利になることを願っていますが、現時点では引数を与えているように見えます。純粋なSwiftプログラムを書きます。

38
Kevin Frost

アプリが起動したらすぐにプロセス情報を使用します。

let args = NSProcessInfo.processInfo().arguments
print(args)

そこに危険なものはなく、非常に便利です。

import Foundation(またはCocoa/UIKit)。

12
Daij-Djan

Swiftの場合、次のコードを使用できます。

let argc = CommandLine.argc
let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))

これは、Objective-Cメイン関数で使用されるargcおよびargvパラメーターと同等です。

int main(int argc, char *argv[])

Swiftの古いバージョンでは、Process.argcおよびProcess.unsafeArgvまたはC_ARGCおよびC_ARGV

IOSアプリのUIApplicationMain関数にこの変数を渡すことができます。

スウィフト3:

let argc = CommandLine.argc
let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))
UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.self))

previous Swift=バージョン:

UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))

または:

UIApplicationMain(C_ARGC, C_ARGC, nil, NSStringFromClass(AppDelegate.self))

Objective-C:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
11
Darrarski
     import Foundation


     println(C_ARGC) //CInt    
     println(C_ARGV) // CString

上記のコードのように、C_ARGCを使用して引数の数を取得できます。この引数を取得するC_ARGV。

1
Waruna