gpt4 book ai didi

swift - 如何使函数对可选值序列进行操作?

转载 作者:可可西里 更新时间:2023-11-01 01:06:32 25 4
gpt4 key购买 nike

如何在 Swift 中指定一个函数应该对一系列可选值进行操作?例如,我想创建一个这样的函数,它适用于可选值数组和序列。

// Given an array of optional values, return the first one with a value, if any
func firstValue<E>(ary: [E?]) -> E? {
for e in ary {
if let x = e {
return x
}
}
return nil
}

我希望能奏效,但没有奏效,因为没有 OptionalType 这样的东西):

func firstValue<C: SequenceType where C.Generator.Element: OptionalType>(seq: C) -> C.Generator.Element {
var g = seq.generate()
while let e = g.next() {
return e
}
return nil
}

最佳答案

试试这个:

func firstValue<E, S: SequenceType where S.Generator.Element == Optional<E> >(seq: S) -> E? {
var g = seq.generate()
while let e:Optional<E> = g.next() {
if e != nil {
return e
}
}
return nil
}

let a:[Int?] = [nil,nil, 42, nil]
println(firstValue(a)) // -> 42 as Int?

我使用 Xcode 版本 6.1.1 (6A2006) 和版本 6.2 (6C86e) 进行了测试


注意

没有:Optional<E>while条件下,编译器崩溃。

如果我们这样声明函数,编译器会在某些环境中发生冲突。

func firstValue<S: SequenceType, E where S.Generator.Element == Optional<E> > {
// ^^^^^^^^^^^^^^^^^^ replaced E and S

我认为这些是编译器错误。请参阅下面的评论。

关于swift - 如何使函数对可选值序列进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com