我看过这个签名探索库实现:
public final class QueryResults<T> {
public static <T> QueryResults<T> emptyResults() {
return (QueryResults<T>) EMPTY;
};
}
我不太清楚:
T
已经声明为类定义时,为什么T
再次声明为函数签名?<T>
而不是T
?答案 0 :(得分:3)
由于Type Erasure,泛型仅在编译时应用于类的实例。 func boldSearchResult(searchString: String, resultString: String) -> NSMutableAttributedString {
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: resultString)
let pattern = NSRegularExpression.escapedPattern(for: searchString.lowercased())
let range: NSRange = NSMakeRange(0, resultString.count)
let regex = try! NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options())
regex.enumerateMatches(in: resultString.lowercased(), options: NSRegularExpression.MatchingOptions(), range: range) { (textCheckingResult, matchingFlags, stop) -> Void in
let subRange = textCheckingResult?.range
attributedString.addAttribute(NSAttributedStringKey.font, value: UIFont.boldSystemFont(ofSize: 15.0), range: subRange!)
}
return attributedString
}
无效作为静态标识符。
因此,要创建使用类型参数的静态方法,必须在方法上声明type参数,从而创建泛型方法。
QueryResults<...>
是type参数的声明,而不是返回类型(返回类型为<T>
)。
答案 1 :(得分:0)
这些T
具有不同的范围。类声明中的一个扩展了类的实例。静态方法中的那个只扩展到方法签名和正文。
您可以为这些类型变量使用不同的名称以避免混淆。
关于问题的第二部分:该方法不返回<T>
。它返回QueryResults<T>
。前者是类型变量<T>
的声明。