Cおよび派生物には、エントリポイント関数へのargc
およびargv
(およびenvp
)パラメータがありますが、Swiftには適切なものがありません:トップレベルコードは単なるコードであり、パラメーターはありません。
Swiftプログラムでargc
およびargv
と同等のものにアクセスするにはどうすればよいですか?
Processは、CommandLine(Swift 3.0 8月4日のスナップショット)
let arguments = CommandLine.arguments
(何らかの理由で、これは changelog で言及されていませんでした)
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プログラムを書きます。
アプリが起動したらすぐにプロセス情報を使用します。
let args = NSProcessInfo.processInfo().arguments
print(args)
そこに危険なものはなく、非常に便利です。
import Foundation
(またはCocoa
/UIKit
)。
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]));
}
}
import Foundation
println(C_ARGC) //CInt
println(C_ARGV) // CString
上記のコードのように、C_ARGCを使用して引数の数を取得できます。この引数を取得するC_ARGV。