无法将Object <string>类型的返回表达式转换为返回类型Object <character>

时间:2015-09-12 12:11:56

标签: swift

我正在处理Functional programming in Swift中的一些代码,但是这本书没有使用Swift 2进行更新,我在以下代码中遇到错误:

func insert<T: Hashable>(key: [T], trie: Trie<T>) -> Trie<T> {
    if let (head, tail) = key.decompose {
        if let nextTrie = trie.children[head] {
            var newChildren = trie.children
            newChildren[head] = insert(tail, trie: nextTrie)

            return Trie(isElem: trie.isElem, children: newChildren)
        } else {
            var newChildren = trie.children
            newChildren[head] = single(tail)

            return Trie(isElem: trie.isElem, children: newChildren)
        }
    } else {
        return Trie(isElem: true, children: trie.children)
    }
}

func buildString(words: [String]) -> Trie<Character> {
    return reduce(words, empty()) { trie, word in
        insert([word], trie: trie)
    }
}

buildString内我得到了这个:

Cannot convert return expression of type Trie<String>  to return type Trie<Character> 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

假设func empty<T>() -> Trie<T> { return Trie<T>() } 看起来像这样

buildString

func buildString(words: [String]) -> Trie<Character> { return words.reduce(empty()) { trie, word in insert(Array(word.characters), trie: trie) } } 功能更改为

insert

解释

Character的第一个参数中您想要的是Array(word.characters)个实例的数组,您可以通过调用Array(word)获得这些实例。 [word.characters]是Swift 1.2的方式,不再适用于Swift 2。另外,reduce只创建一个包含单个元素的数组(字符串的字符视图),这就是为什么它也不起作用。

请注意,我还将全局.reduce函数(Swift 1.2方式)更改为实例方法define( 'WP_HTTP_BLOCK_EXTERNAL', TRUE ); (Swift 2方式)。