【问题标题】:Solving swift error: Cannot specialize a non-generic definition解决快速错误:无法专门化非泛型定义
【发布时间】:2017-05-17 03:59:02
【问题描述】:

我最近将一个 xcode 项目从 xcode 7 转换为 xcode 8,并在此过程中从 swift 2.3 迁移到 3。该应用程序依赖于 pod 和各种框架。目前有5个错误是一样的,错误是

不能专门化非泛型定义。
在将这个 '

我觉得一旦解决了其中一个错误,我就能修复其余的错误。所以这里是当前发生错误的代码的sn-p

func getWordIndex(_ charIndex:Int) -> (start: Int, stop: Int) {

        let plainString =  self.fillerAttribString?.string

        var charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: charIndex) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: charIndex+1))!))


        var tCharIndex = charIndex
        var leftCharIndex = 0
        var rightCharIndex = (self.fillerAttribString?.length)! - 1
        for i in tCharIndex..<self.fillerAttribString!.length {
            charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!))
            if (charAtIndex == " ")
            {
                rightCharIndex = i
                break
            }
        }

        tCharIndex = charIndex
        for i in (0..<tCharIndex).reversed(){


            charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!))
            if (charAtIndex == " ")
            {
                leftCharIndex = i + 1
                break
            }
        }

        return (leftCharIndex, rightCharIndex);
    }

错误发生在这些行上

    var charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: charIndex) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: charIndex+1))!))

charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!))

charAtIndex = plainString?.substring(with: Range<String.Index>( plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!))

这些是此函数中发生此错误的代码的 3 部分。 先感谢您。我在这里环顾四周,似乎无法弄清楚。

【问题讨论】:

  • 其他然后如果索引太大(或低于 0),则在未包装的选项中出现错误,我重新测试了这段代码几次,似乎对我来说工作正常。你在这个类中使用泛型吗?有什么与这个词功能有关的吗?我不知道,但我觉得我们需要更多信息才能提供帮助。由于此代码本身可以正常工作。

标签: ios swift swift3


【解决方案1】:
func getWordIndex(_ charIndex:Int) -> (start: Int, stop: Int) {

    let plainString =  self.fillerAttribString?.string

    var charAtIndex = plainString?.substring(with: plainString!.characters.index(plainString!.startIndex, offsetBy: charIndex) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: charIndex+1))!)


    var tCharIndex = charIndex
    var leftCharIndex = 0
    var rightCharIndex = (self.fillerAttribString?.length)! - 1
    for i in tCharIndex..<self.fillerAttribString!.length {
        charAtIndex = plainString?.substring(with: plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!)
        if (charAtIndex == " ")
        {
            rightCharIndex = i
            break
        }
    }

    tCharIndex = charIndex
    for i in (0..<tCharIndex).reversed(){


        charAtIndex = plainString?.substring(with: plainString!.characters.index(plainString!.startIndex, offsetBy: i) ..<  (plainString?.characters.index((plainString?.startIndex)!, offsetBy: i+1))!)
        if (charAtIndex == " ")
        {
            leftCharIndex = i + 1
            break
        }
    }

    return (leftCharIndex, rightCharIndex);
}

【讨论】:

    【解决方案2】:

    尝试删除 Range&lt;String.Index&gt; 初始化程序调用,因为后面的内容似乎已经是一个字符串范围。

    不过,您的风格也应该适用。例如,所有 3 种形式都可以互换:

    let str = "foo"
    let r0 = str.startIndex..<str.endIndex
    let r1 = Range(str.startIndex..<str.endIndex)
    let r2 = Range<String.Index>(str.startIndex..<str.endIndex)
    
    r0 == r1 // true
    r0 == r2 // true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多