类型的值'字符串'没有会员'范围'在斯威夫特

时间:2017-01-07 02:27:38

标签: swift

我相信我遇到过Swift版本问题,但我不太确定。代码可以在我的Xcode平台上运行,但不能在在线swift编译器中运行。有没有其他人遇到这个问题或者知道我可以用什么来替换以下我检查字符的行:

if i == 0 || !((line.range(of: ":") != nil)) 

这是我的代码:

import Foundation



func hackTheString(line: String){

        var maxOpen: Int = 0
        var minOpen: Int = 0

        minOpen = 0
        maxOpen = 0
        let i = 0
        while i < line.characters.count {
            for character in line.characters {
                if character == "(" {
                    maxOpen += 1
                    if i == 0 || !((line.range(of: ":") != nil)) {
                        minOpen += 1
                        }
                    }
                else if character == ")"{
                    minOpen = max(0,minOpen-1)

                    if i == 0 || !((line.range(of: ":") != nil)){
                        maxOpen -= 1;
                        }
                    if maxOpen < 0{
                        break
                    }
                }
            }

        if maxOpen >= 0 && minOpen == 0{
            print("YES")
            }else{
                print("NO")
            }
        }
    }


while let line = readLine() {


    print(hackTheString(line))

}

在线编译器提供的错误是:

source.swift:17:37: error: value of type 'String' has no member 'range'
                    if i == 0 || !((line.range(of: ":") != nil)) {
                                    ^~~~ ~~~~~
source.swift:24:37: error: value of type 'String' has no member 'range'
                    if i == 0 || !((line.range(of: ":") != nil)){
                                    ^~~~ ~~~~~

1 个答案:

答案 0 :(得分:7)

我尝试在IBM的在线swift编译器上使用range(of:)函数,我确保编写import Foundation并且它完全有效。然后我试着看看在线编译器使用的swift版本是什么版本的代码:

#if swift(>=3.0)
print("Hello, Swift 3!")
#elseif swift(>=2.2)
print("Hello, Swift 2.2!")
#elseif swift(>=2.1)
print("Hello, Swift 2.1!")
#endif

这样我就知道我尝试的在线编译器使用的是Swift 3,因此功能完美无缺。尝试检查您的在线编译器使用的版本,并使用特定于该版本的相关功能。

您现在可以做的其他事情是使用字符串的characters数组并找到角色的Index。所以你的代码可能如下所示:

if i == 0 || !((line.characters.index(of: ":") != nil)) {
                        minOpen += 1          
}