无法推断通用参数'Self'(快速4)

Hai*_*uan 6 xcode swift4

我想为字符串做一个子字符串扩展,我尝试了2种方法,但不成功:

extension String
{
    func substringToFirstChar(of char: Character) -> String
    {
        let pos = self.range(of: String(char))
        let subString = self[..<pos?.lowerBound]   
        return String(subString)
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

extension String
{
    func substringToFirstChar(of char: Character) -> String
    {
        let pos = self.index(of: char)
        let subString = self[..<pos]
        return String(subString)
    }
}
Run Code Online (Sandbox Code Playgroud)

xcode提示错误: 无法 在" let subString = self [... "行中推断出通用参数'Self'.

怎么做 ?

vad*_*ian 9

range(of/ index(of返回一个可选项.您必须在范围表达式中展开可选项

extension String
{
    func substringToFirstChar(of char: Character) -> String?
    {
        guard let pos = self.range(of: String(char))?.lowerBound else { return nil }
        // or  guard let pos = self.index(of: char) else { return nil }
        let subString = self[..<pos]
        return String(subString)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者 - 避免可选 - 如果没有匹配则返回未更改的字符串

extension String
{
    func substringToFirstChar(of char: Character) -> String
    {
        guard let pos = self.range(of: String(char))?.lowerBound else { return self }
        // or  guard let pos = self.index(of: char) else { return self }
        let subString = self[..<pos]
        return String(subString)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Haiyuan 如果它解决了您的问题,您应该将其标记为已回答。 (2认同)