zne*_*eak 36 command-line command-line-arguments swift
C和衍生物具有argc和argv(和envp)参数到它们的入口点函数,但是Swift没有一个正确的:顶级代码只是代码,它没有参数.
一个人怎么可以访问相当于argc和argv在斯威夫特程序?
amb*_*ght 45
进程刚刚重命名为CommandLine(自Swift 3.0 8月4日快照)
let arguments = CommandLine.arguments
Run Code Online (Sandbox Code Playgroud)
(由于某种原因,更改日志中未提及此内容)
Kev*_*ost 38
Process.arguments 是你的朋友!
幸运的是,这更容易,内置:不进口任何东西,没有用C,客观或其他方式弄脏你的手.
考虑一下,让我们称之为args.swift:
Swift 2版本:
var c = 0;
for arg in Process.arguments {
println("argument \(c) is: \(arg)")
c++
}
Run Code Online (Sandbox Code Playgroud)
Swift 3版本:
var c = 0;
for arg in CommandLine.arguments {
print("argument \(c) is: \(arg)")
c += 1
}
Run Code Online (Sandbox Code Playgroud)
我们可以像这样编译和运行它:
$ 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
Run Code Online (Sandbox Code Playgroud)
请注意,第一个参数是程序名称,如您所料.
似乎每个参数都是一个String,正如您可能也期望的那样.
我非常希望Process随着Swift的成熟变得更有用,但是现在它似乎只给你一些参数.如果您正在尝试编写纯Swift程序,那么这很多.
Dai*_*jan 12
一旦你的应用程序启动,我就会使用进程信息:
let args = NSProcessInfo.processInfo().arguments
print(args)
Run Code Online (Sandbox Code Playgroud)
那里没什么不安全的,非常方便.
请注意,您必须import Foundation(或Cocoa/ UIKit).
Dar*_*ski 11
对于Swift 3,您可以使用以下代码:
let argc = CommandLine.argc
let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))
Run Code Online (Sandbox Code Playgroud)
这相当于Objective-C主要功能中使用的argc和argv参数:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
对于旧版本的雨燕,你可以使用Process.argc和Process.unsafeArgv或C_ARGC和C_ARGV.
您可以将此变量传递给UIApplicationMainiOS应用中的功能:
斯威夫特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))
Run Code Online (Sandbox Code Playgroud)
以前的Swift版本:
UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))
Run Code Online (Sandbox Code Playgroud)
要么:
UIApplicationMain(C_ARGC, C_ARGC, nil, NSStringFromClass(AppDelegate.self))
Run Code Online (Sandbox Code Playgroud)
Objective-C的:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14611 次 |
| 最近记录: |