Swift 两个几乎相同的函数合为一?

Swift 两个几乎相同的函数合为一?,swift,functional-programming,Swift,Functional Programming,我有两个函数。他们实际上在做同样的事情。按fieldNameArray将数据库结果中的数据获取到Int或Double数组中。。如何将这两个函数合并为一个?可能吗?唯一的区别是字段类型和so返回类型 func fieldsToInt ( fieldNameArray : [String] ) -> [Int] { var returnArray = [Int]() for fNA in fieldNameArray { let n = Int ( results.in

我有两个函数。他们实际上在做同样的事情。按fieldNameArray将数据库结果中的数据获取到Int或Double数组中。。如何将这两个函数合并为一个?可能吗?唯一的区别是字段类型和so返回类型

func fieldsToInt ( fieldNameArray : [String] ) -> [Int] {
   var returnArray = [Int]()
   for fNA in fieldNameArray {
      let n = Int ( results.int(forColumn: fNA) )
      returnArray.append( n )
    }
   return returnArray;
}

func fieldsToDouble ( fieldNameArray : [String] ) -> [Double] {
   var returnArray = [Double]()
   for fNA in fieldNameArray {
   let n = Double ( results.int(forColumn: fNA) )
      returnArray.append( n )
   }
   return returnArray;
}

你可以试试泛型,比如

func fieldsToNumber<T> ( fieldNameArray : [String] ) -> [T] {
   var returnArray = [T]()
   for fNA in fieldNameArray {
   let n = T ( results.int(forColumn: fNA) )
      returnArray.append( n )
   }
   return returnArray;
}

是的,这是可能的,您应该使用,特别是您需要一个通用函数

解决问题的代码大致如下所示:

//这是一个模拟你没有发布的代码的结构 结构结果{ func intforColumn:String->Int16{ 返回1 } } 让结果=结果 协议数据库元素可表示{ 初始化?uu数据库值:Int16 } func fieldsfieldNameArray:[字符串]->[元素]{ var returnArray=[Element] 对于fieldNameArray中的fNA{ 如果让n=Elementresults.intforColumn:fNA{ returnArray.appendn } } 返回数组 } 扩展名Int:DatabaseElementRepresentable{} 双扩展名:DatabaseElementRepresentable{} let ints:[Int]=fieldsfieldNameArray:[test] let Double:[Double]=FieldsFielddNameArray:[test]
请使用函数intforColumn:返回的值更改Int16。intforColumn:fNA as?元素行出现错误,初始值设定项“init_389;:”要求“T”符合“BinaryInteger”,此外,还要求results.int或results.double?如何知道选择哪一个?如果不知道函数intforColumn:returns的类型,第一个错误很难理解,但是我已经更新了snipped,并添加了最后两行的用法示例