gpt4 book ai didi

ios - 我的 Array+RemoveObject.Swift 应该包含什么?

转载 作者:行者123 更新时间:2023-11-29 01:21:12 24 4
gpt4 key购买 nike

我正在使用模板项目来尝试构建新应用程序。当我运行模板项目时,出现错误:“[T] 没有名为“indexOf”的成员。

Array+RemoveObject.swift 文档中的现有代码是:

import Foundation
public func removeObject<T: Equatable>(object: T, inout fromArray array: [T])
{ let index = array.indexOf(object)
if let index = index {
array.removeAtIndex(index)
}
}

问题出在indexOf的使用上吗?奇怪的是,当我尝试使用回答类似问题的人的解决方案时,我从 bond 框架中得到了大约 100 个错误。

最佳答案

你自己的功能对我来说很好(Swift 2.1.1,Xcode 7.2)。似乎您希望此函数成为您的公共(public)类的方法。对于最小的工作示例,您至少需要将 removeObject() 方法包装在您希望它所属的类中。另请注意,您不需要使用单独的行来分配 .indexOf(..) 调用的结果(可能是 nil),但可以添加分配和 nil 检查单个 if let 语句。

public class MyArrayOperations {

// ...

static public func removeObject<T: Equatable>(object: T, inout fromArray array: [T]) {
if let index = array.indexOf(object) {
array.removeAtIndex(index)
}
}

}

var arr = ["1", "2","3"]
MyArrayOperations.removeObject("2", fromArray: &arr)
print(arr) // ["1", "3"]

另请注意,如果您希望数组本身符合某些协议(protocol),您可以使用两个泛型显式声明相同的行为。然后,您对数组类型使用一个单独的泛型,对其元素使用一个泛型,此后指定元素类型应符合数组的 Generator.Element 类型。例如:

func removeObject<T: Equatable, U: _ArrayType where U.Generator.Element == T>(object: T, inout fromArray array: U) {
if let index = array.indexOf(object) {
array.removeAtIndex(index)
}
}

使用这种方法,您可以在上面的函数签名中为泛型数组 U 添加类型约束的附加协议(protocol),例如

func removeObject<T: Equatable, U: protocol<_ArrayType, MyProtocol> where U.Generator.Element == T>(object: T, inout fromArray array: [T]) { ...

这在“模拟”符合某些协议(protocol)的通用 Array 扩展时特别有用。参见例如下面是这样一个例子:

关于ios - 我的 Array+RemoveObject.Swift 应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583487/

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