0

当我为 Mac 编译我的 Swift 项目时,它编译得很好,但是当我在 Ubuntu 16.04 中编译相同的代码时,我得到了以下错误。

value of type 'Scanner' has no member 'scanHexInt32'
        if Scanner(string: self).scanHexInt32(&value) {
           ^~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
Foundation.Scanner:8:17: note: did you mean 'scanHexInt'?
    public func scanHexInt(_ result: UnsafeMutablePointer<UInt32>) -> Bool

原因是什么?

4

1 回答 1

0

它需要不同的标志:

    import Foundation

    public extension String {
      public func scanHex() -> UInt32? {
        var value = UInt32(0)
        #if os(Linux)
        if Scanner(string: self).scanHexInt(&value) {
          return value
        } else {
          return nil
        }
        #else
        if Scanner(string: self).scanHexInt32(&value) {
          return value
        } else {
          return nil
        }
        #endif
      }
    }

    if let x = "0x100".scanHex() {
      print("scanned:", x)
    } else {
      print("scan failed")
    }

这个 main.swift 在 mac/linux 上都经过了测试。

于 2017-09-11T20:54:22.233 回答