【问题标题】:'substring(from:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator. Swift 4 Error [duplicate]'substring(from:)' 已弃用:请使用带有 'partial range from' 运算符的字符串切片下标。 Swift 4错误[重复]
【发布时间】:2017-11-15 10:08:18
【问题描述】:

我正在将我现有的应用程序从 Swift 3 转换为 Swift 4。它给出了错误:

'substring(from:)' 已弃用:请使用带有 'partial range from' 运算符的字符串切片下标。

'characters' 已弃用:请直接使用字符串或子字符串

我的Swift 3 代码是:

public convenience init?(hexString: String, alpha: Float) {
    var hex = hexString

    // Check for hash and remove the hash
    if hex.hasPrefix("#") {
        hex = hex.substring(from: hex.characters.index(hex.startIndex, offsetBy: 1))
    }

    if (hex.range(of: "(^[0-9A-Fa-f]{6}$)|(^[0-9A-Fa-f]{3}$)", options: .regularExpression) != nil) {

        // Deal with 3 character Hex strings
        if hex.characters.count == 3 {
            let redHex   = hex.substring(to: hex.characters.index(hex.startIndex, offsetBy: 1))
            let greenHex = hex.substring(with: (hex.characters.index(hex.startIndex, offsetBy: 1) ..< hex.characters.index(hex.startIndex, offsetBy: 2)))
            let blueHex  = hex.substring(from: hex.characters.index(hex.startIndex, offsetBy: 2))

            hex = redHex + redHex + greenHex + greenHex + blueHex + blueHex
        }

        let redHex = hex.substring(to: hex.characters.index(hex.startIndex, offsetBy: 2))
        let greenHex = hex.substring(with: (hex.characters.index(hex.startIndex, offsetBy: 2) ..< hex.characters.index(hex.startIndex, offsetBy: 4)))
        let blueHex = hex.substring(with: (hex.characters.index(hex.startIndex, offsetBy: 4) ..< hex.characters.index(hex.startIndex, offsetBy: 6)))

        var redInt:   CUnsignedInt = 0
        var greenInt: CUnsignedInt = 0
        var blueInt:  CUnsignedInt = 0

        Scanner(string: redHex).scanHexInt32(&redInt)
        Scanner(string: greenHex).scanHexInt32(&greenInt)
        Scanner(string: blueHex).scanHexInt32(&blueInt)

        self.init(red: CGFloat(redInt) / 255.0, green: CGFloat(greenInt) / 255.0, blue: CGFloat(blueInt) / 255.0, alpha: CGFloat(alpha))
    }
    else {
        self.init()
        return nil
    }
}

如何将其转换为 Swift 4

【问题讨论】:

    标签: ios swift xcode swift3 swift4


    【解决方案1】:

    'characters' 已弃用:请直接使用字符串或子字符串

    为此,您可以直接在 swift 4 中循环遍历字符串,因此不需要字符数组。

    对于

    'substring(from:)' 已弃用:请使用带有 'partial range from' 运算符的字符串切片下标。

    参考How can I use String slicing subscripts in Swift 4?

    【讨论】:

      猜你喜欢
      • 2018-03-02
      • 2023-03-28
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多