@@ -192,75 +192,96 @@ extension String {
192
192
// encoding:(NSStringEncoding)enc
193
193
// error:(NSError **)error
194
194
195
- /// Returns a string created by reading data from the file at a
195
+ /// Produces a string created by reading data from the file at a
196
196
/// given path interpreted using a given encoding.
197
- public static func stringWithContentsOfFile (
198
- path: String ,
197
+ public init ? (
198
+ contentsOfFile path: String ,
199
199
encoding enc: NSStringEncoding ,
200
200
error: NSErrorPointer = nil
201
- ) -> String ? {
202
- return NSString ( contentsOfFile: path, encoding: enc, error: error)
201
+ ) {
202
+ if let ns = NSString ( contentsOfFile: path, encoding: enc, error: error) {
203
+ self = ns as String
204
+ } else {
205
+ return nil
206
+ }
203
207
}
204
208
205
209
// + (instancetype)
206
210
// stringWithContentsOfFile:(NSString *)path
207
211
// usedEncoding:(NSStringEncoding *)
208
212
// enc error:(NSError **)error
209
213
210
- /// Returns a string created by reading data from the file at
214
+ /// Produces a string created by reading data from the file at
211
215
/// a given path and returns by reference the encoding used to
212
216
/// interpret the file.
213
- public static func stringWithContentsOfFile (
214
- path: String ,
217
+ public init ? (
218
+ contentsOfFile path: String ,
215
219
usedEncoding: UnsafeMutablePointer < NSStringEncoding > = nil ,
216
220
error: NSErrorPointer = nil
217
- ) -> String ? {
218
- return NSString ( contentsOfFile: path, usedEncoding: usedEncoding,
219
- error: error)
221
+ ) {
222
+ if let ns = NSString ( contentsOfFile: path, usedEncoding: usedEncoding,
223
+ error: error) {
224
+ self = ns as String
225
+ } else {
226
+ return nil
227
+ }
220
228
}
221
229
222
230
// + (instancetype)
223
231
// stringWithContentsOfURL:(NSURL *)url
224
232
// encoding:(NSStringEncoding)enc
225
233
// error:(NSError **)error
226
234
227
- /// Returns a string created by reading data from a given URL
235
+ /// Produces a string created by reading data from a given URL
228
236
/// interpreted using a given encoding. Errors are written into the
229
237
/// inout `error` argument.
230
- public static func stringWithContentsOfURL(
231
- url: NSURL , encoding enc: NSStringEncoding , error: NSErrorPointer = nil
232
- ) -> String ? {
233
- return NSString ( contentsOfURL: url, encoding: enc, error: error)
238
+ public init ? (
239
+ contentsOfURL url: NSURL ,
240
+ encoding enc: NSStringEncoding ,
241
+ error: NSErrorPointer = nil
242
+ ) {
243
+ if let ns = NSString ( contentsOfURL: url, encoding: enc, error: error) {
244
+ self = ns as String
245
+ } else {
246
+ return nil
247
+ }
234
248
}
235
249
236
250
// + (instancetype)
237
251
// stringWithContentsOfURL:(NSURL *)url
238
252
// usedEncoding:(NSStringEncoding *)enc
239
253
// error:(NSError **)error
240
254
241
- /// Returns a string created by reading data from a given URL
255
+ /// Produces a string created by reading data from a given URL
242
256
/// and returns by reference the encoding used to interpret the
243
257
/// data. Errors are written into the inout `error` argument.
244
- public static func stringWithContentsOfURL (
245
- url: NSURL ,
258
+ public init ? (
259
+ contentsOfURL url: NSURL ,
246
260
usedEncoding enc: UnsafeMutablePointer < NSStringEncoding > = nil ,
247
261
error: NSErrorPointer = nil
248
- ) -> String ? {
249
- return NSString ( contentsOfURL: url, usedEncoding: enc,
250
- error: error)
262
+ ) {
263
+ if let ns = NSString ( contentsOfURL: url, usedEncoding: enc, error: error) {
264
+ self = ns as String
265
+ } else {
266
+ return nil
267
+ }
251
268
}
252
269
253
270
// + (instancetype)
254
271
// stringWithCString:(const char *)cString
255
272
// encoding:(NSStringEncoding)enc
256
273
257
- /// Returns a string containing the bytes in a given C array,
274
+ /// Produces a string containing the bytes in a given C array,
258
275
/// interpreted according to a given encoding.
259
- public static func stringWithCString (
260
- cString : UnsafePointer < CChar > ,
276
+ public init ? (
277
+ CString : UnsafePointer < CChar > ,
261
278
encoding enc: NSStringEncoding
262
- ) -> String ? {
263
- return NSString ( CString: cString, encoding: enc)
279
+ ) {
280
+ if let ns = NSString ( CString: CString, encoding: enc) {
281
+ self = ns as String
282
+ } else {
283
+ return nil
284
+ }
264
285
}
265
286
266
287
@@ -270,12 +291,14 @@ extension String {
270
291
271
292
// + (instancetype)stringWithUTF8String:(const char *)bytes
272
293
273
- /// Returns a string created by copying the data from a given
294
+ /// Produces a string created by copying the data from a given
274
295
/// C array of UTF8-encoded bytes.
275
- public static func stringWithUTF8String(
276
- bytes: UnsafePointer < CChar >
277
- ) -> String ? {
278
- return NSString ( UTF8String: bytes)
296
+ public init ? ( UTF8String bytes: UnsafePointer < CChar > ) {
297
+ if let ns = NSString ( UTF8String: bytes) {
298
+ self = ns as String
299
+ } else {
300
+ return nil
301
+ }
279
302
}
280
303
281
304
//===--- Instance Methods/Properties-------------------------------------===//
@@ -729,17 +752,21 @@ extension String {
729
752
// length:(NSUInteger)length
730
753
// encoding:(NSStringEncoding)encoding
731
754
732
- /// Returns an initialized `NSString` object equivalent to the given
755
+ /// Produces an initialized `NSString` object equivalent to the given
733
756
/// `bytes` interpreted in the given `encoding`.
734
- public static func stringWithBytes <
757
+ public init ? <
735
758
S: SequenceType where S. Generator. Element == UInt8
736
759
> (
737
760
bytes: S , encoding: NSStringEncoding
738
- ) -> String ? {
761
+ ) {
739
762
let byteArray = Array ( bytes)
740
- return NSString (
741
- bytes: byteArray, length: byteArray. count, encoding: encoding
742
- ) as NSString ? // HACK: FIXME: coerce to optional NSString to handle nil
763
+ if let ns = NSString (
764
+ bytes: byteArray, length: byteArray. count, encoding: encoding
765
+ ) {
766
+ self = ns as String
767
+ } else {
768
+ return nil
769
+ }
743
770
}
744
771
745
772
// - (instancetype)
@@ -748,18 +775,22 @@ extension String {
748
775
// encoding:(NSStringEncoding)encoding
749
776
// freeWhenDone:(BOOL)flag
750
777
751
- /// Returns an initialized `String` object that contains a
778
+ /// Produces an initialized `String` object that contains a
752
779
/// given number of bytes from a given buffer of bytes interpreted
753
780
/// in a given encoding, and optionally frees the buffer. WARNING:
754
- /// this method is not memory-safe!
755
- public static func stringWithBytesNoCopy (
756
- bytes: UnsafeMutablePointer < Void > , length: Int ,
781
+ /// this initializer is not memory-safe!
782
+ public init ? (
783
+ bytesNoCopy bytes: UnsafeMutablePointer < Void > , length: Int ,
757
784
encoding: NSStringEncoding , freeWhenDone flag: Bool
758
- ) -> String ? {
759
- return NSString (
760
- bytesNoCopy: bytes, length: length,
761
- encoding: encoding, freeWhenDone: flag
762
- ) as NSString ? // Important: coerce to optional NSString to handle nil
785
+ ) {
786
+ if let ns = NSString (
787
+ bytesNoCopy: bytes, length: length,
788
+ encoding: encoding, freeWhenDone: flag
789
+ ) {
790
+ self = ns as String
791
+ } else {
792
+ return nil
793
+ }
763
794
}
764
795
765
796
0 commit comments