我正在尝试完成苹果新书“Swift编程语言”第46页的练习。它提供以下代码:
func anyCommonElements <T,U where T: Sequence,U: Sequence,T.GeneratorType.Element: Equatable,T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T,rhs: U) -> Bool { for lhsItem in lhs { for rhsItem in rhs { if lhsItem == rhsItem { return true } } } return false } anyCommonElements([1,2,3],[3])
练习是改变函数,以便返回两个序列的所有元素。为此,我尝试使用以下代码:
func anyCommonElements <T,T.GeneratorType.Element: Equatable,rhs: U) -> T.GeneratorType[] { var toReturn = T.GeneratorType[]() for lhsItem in lhs { for rhsItem in rhs { if lhsItem == rhsItem { toReturn.append(lhsItem) } } } return toReturn } anyCommonElements([1,[3])
但在第2行,我收到错误:找不到成员’下标’
这个错误的原因是什么,这个问题的最佳解决方案是什么?
通过使返回值为T.GeneratorType.Element的数组,我可以使其工作。
func anyCommonElements <T,U where T: SequenceType,U: SequenceType,T.Generator.Element: Equatable,T.Generator.Element == U.Generator.Element> (lhs: T,rhs: U) -> Array<T.Generator.Element> { var toReturn = Array<T.Generator.Element>() for lhsItem in lhs { for rhsItem in rhs { if lhsItem == rhsItem { toReturn.append(lhsItem) } } } return toReturn } anyCommonElements([1,[3])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。