<https://github.com/apple/swift-corelibs-foundation/blob/5f8656628c79bf4df3980efbf45dfb3eebd35766/Foundation/NSScanner.swift#L485-L487>

        /// Revised API for avoiding usage of AutoreleasingUnsafeMutablePointer 
and better Optional usage.
        /// - Experiment: This is a draft API currently under consideration for 
official import into Foundation as a suitable alternative
        /// - Note: Since this API is under consideration it may be either 
removed or revised in the near future
        extension Scanner {
            public func scanInt() -> Int32?
            public func scanInteger() -> Int?
            public func scanLongLong() -> Int64?
            public func scanUnsignedLongLong() -> UInt64?
            public func scanFloat() -> Float?
            public func scanDouble() -> Double?
            public func scanHexInt() -> UInt32?
            public func scanHexLongLong() -> UInt64?
            public func scanHexFloat() -> Float?
            public func scanHexDouble() -> Double?
            public func scanString(string searchString: String) -> String?
            public func scanCharactersFromSet(_ set: CharacterSet) -> String?
            public func scanUpToString(_ string: String) -> String?
            public func scanUpToCharactersFromSet(_ set: CharacterSet) -> 
String?
        }

Foundation issues should be discussed on the swift-corelibs-dev list.

-- Ben

> On 30 Nov 2016, at 10:10, Oliver Drobnik via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Working on a function for Foundation’s Scanner I stumbled on this LLVM crash: 
> https://bugs.swift.org/browse/SR-3295 <https://bugs.swift.org/browse/SR-3295>
> 
> This got me thinking about a workaround and I would like to prose this:
> 
> When importing Foundation into Swift 3, all 
> 
> AutoreleasingUnsafeMutablePointer<T?>?
> 
> should instead be exposed as simple:
> 
> inout T?
> 
> e.g.
> 
> open func scanString(_ string: String, into result: 
> AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool
> 
> would become
> 
> open func scanString(_ string: String, into result: inout String?) -> Bool
> 
> 
> The call would stay exactly the same for normal use cases where you specify a 
> receiving variable:
> 
> var string: String?
> scanString("=", into: &string)
> 
> because inout parameters require a &
> 
> 
> for the use case where you don’t require a receiving parameter, a second 
> method without result parameter would be generated:
> 
> open func scanString(_ string: String) -> Bool
> 
> This is necessary because you cannot specify nil or an immutable value for an 
> inout parameter. 
> 
> 
> A fixit/migration would change calls to
> 
> scanString(“foo", into result: nil)
> 
> into
> 
> scanString(“foo")
> 
> 
> The normal call with receiving variable would stay the same. But the case 
> without return would become more concise.
> 
> What do you think?
> 
> kind regards
> Oliver Drobnik
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to