[swift-users] How do generics interact with overloaded methods?
Ryan Conway
theconmethod at gmail.com
Thu Jan 14 01:04:57 CST 2016
Hey swift-users,
I'm teaching myself Swift, coming from a mostly C and Python background,
and would like to understand generics more deeply. Right now, I'm seeing
generic data types invoke overloaded methods in ways I do not understand,
and am seeking clarification why.
In an effort to model a data structure whose data can be represented as
multiple data types simultaneously, I've made this class. Here its
implementation is mocked using constants.
class Bar {
func read() -> Int {
return -1
}
func read() -> UInt {
return 1
}
func read<T>() -> T {
print("Unsupported data type requested")
exit(1)
}
}
Objects of that class return the requested type as expected when used like
so:
let thisWorks: Int = Bar().read() // returns -1
let thisAlsoWorks: UInt = Bar().read() // returns 1
However, when I introduce generics on top of that class, the expected
method (the "most precise" method) is not called. For example, given this
other class:
class Baz<T> {
let myBar = Bar()
func read() -> T {
return self.myBar.read()
}
}
Both of these invocations call the generic read<T>() -> T method rather
than the read() -> UInt method:
let thisDoesntWork = Baz<UInt>().read()
let thisDoesntWorkEither: UInt = Baz<UInt>().read()
Am I using generics wrong here? Is there some other language feature I
should be using to capture this data? Any pointers would be greatly
appreciated.
Thank you,
Ryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160113/287fea96/attachment.html>
More information about the swift-users
mailing list