我在UITableView
中使用Swift
并且我有一个函数可以根据某些条件返回行数,另一个函数返回每个部分的标题。两个函数具有相同的主体,相同的条件,但第一个函数返回Int
数据类型,第二个函数返回String
数据类型。
我可以以某种方式使这个通用函数成为一个返回一些通用值的函数,但该值必须是' Int'用于第一个函数,String
用于第二个函数。
下面的代码是返回行数的函数。相同的主体去返回部分标题的功能。其返回类型为String
。
func getNumberOfRows(for section: Int) -> Int {
let parameters = SuggestionsTableSectionType.Parameters(recents: recents, suggestions: suggestions, section: section)
if SuggestionsTableSectionType.recentsAndSectionIsZero(parameters).isActive {
return recents.count
} else if SuggestionsTableSectionType.suggestionsAndSectionIsZero(parameters).isActive {
return suggestions.count
} else if SuggestionsTableSectionType.recentsAndSuggestionsAndSectionIsZero(parameters).isActive {
return recents.count
} else if SuggestionsTableSectionType.recentsAndSuggestionsAndSectionIsOne(parameters).isActive {
return suggestions.count
}
return 0
}
感谢您的回答。
答案 0 :(得分:5)
您应该返回tuple
这样的类型:
func getNumberOfRows(for section: Int) -> (Int, String) {}
此外,对于您的代码,您可以使用typealias
关键字来定义tuple
的名称:
typealias NumberOfRowsInfo = (row: Int, someString: String)
func getNumberOfRows(for section: Int) -> NumberOfRowsInfo {}
获取这样的数据:
let info = getNumberOfRows(for: section)
print("Row: \(info.row), string: \(info.someString)")
答案 1 :(得分:2)
您可以使用具有两种不同返回类型的相同功能,例如
func getNumberOfRows(for section: Int) -> (Int,String)
然后将其作为
调用let (yourIntegerValue,yourStringValue) = getNumberOfRows(for section:yourSectionNumber)
现在使用这两个值来执行任务。
答案 2 :(得分:2)
您可以返回tuple
func getNumberOfRows(for section: Int) -> (row:Int,title:String)
和return
就像这样return(row:suggestions.count,title:"Suggestions")
你可以使用
let tupple = getNumberOfRows(for :0)
tupple.row or tupple.title
答案 3 :(得分:2)
我会建议您tuple。
你可以使用这样的元组:
func getNumberOfRows(for section: Int) -> (Int,String) {
return (5,"5")
}
getNumberOfRows(for: 3).0
getNumberOfRows(for: 3).1
答案 4 :(得分:2)
您可以尝试以下方式:
func getNumberOfRows(for section: Int) -> (Int, String) {
let parameters = SuggestionsTableSectionType.Parameters(recents: recents, suggestions: suggestions, section: section)
if SuggestionsTableSectionType.recentsAndSectionIsZero(parameters).isActive {
return (recents.count, "Some String")
} else if SuggestionsTableSectionType.suggestionsAndSectionIsZero(parameters).isActive {
return (suggestions.count, "Some String")
} else if SuggestionsTableSectionType.recentsAndSuggestionsAndSectionIsZero(parameters).isActive {
return (recents.count, "Some String")
} else if SuggestionsTableSectionType.recentsAndSuggestionsAndSectionIsOne(parameters).isActive {
return (suggestions.count, "Some String")
}
return (0, "Some String")
}