@@ -54,11 +54,52 @@ public enum CommandLine {
54
54
return _unsafeArgv
55
55
}
56
56
57
- /// Access to the Swift command line arguments.
58
- // Use lazy initialization of static properties to
59
- // safely initialize the swift arguments.
60
- public static var arguments : [ String ]
61
- = ( 0 ..< Int ( argc) ) . map { String ( cString: _unsafeArgv [ $0] !) }
57
+ // This is extremely unsafe and allows for concurrent writes with no
58
+ // synchronization to the underlying data. In a future version of Swift you
59
+ // will not be able to write to 'CommandLine.arguments'.
60
+ static nonisolated ( unsafe) var _arguments : [ String ] = ( 0 ..< Int ( argc) ) . map {
61
+ String ( cString: _unsafeArgv [ $0] !)
62
+ }
63
+
64
+ /// An array that provides access to this program's command line arguments.
65
+ ///
66
+ /// Use `CommandLine.arguments` to access the command line arguments used
67
+ /// when executing the current program. The name of the executed program is
68
+ /// the first argument.
69
+ ///
70
+ /// The following example shows a command line executable that squares the
71
+ /// integer given as an argument.
72
+ ///
73
+ /// if CommandLine.arguments.count == 2,
74
+ /// let number = Int(CommandLine.arguments[1]) {
75
+ /// print("\(number) x \(number) is \(number * number)")
76
+ /// } else {
77
+ /// print(
78
+ /// """
79
+ /// Error: Please provide a number to square.
80
+ /// Usage: command <number>
81
+ /// """
82
+ /// )
83
+ /// }
84
+ ///
85
+ /// Running the program results in the following output:
86
+ ///
87
+ /// $ command 5
88
+ /// 5 x 5 is 25
89
+ /// $ command ZZZ
90
+ /// Error: Please provide a number to square.
91
+ /// Usage: command <number>
92
+ public static var arguments : [ String ] {
93
+ get {
94
+ _arguments
95
+ }
96
+
97
+ @available ( * , deprecated, message: " Do not modify CommandLine.arguments. It will become read-only in a future version of Swift. " )
98
+ @available ( swift, obsoleted: 6.0 )
99
+ set {
100
+ _arguments = newValue
101
+ }
102
+ }
62
103
}
63
104
64
105
@available ( * , unavailable)
0 commit comments