ich ein ziemlich gutes Verständnis der OO-Programmierung haben und Swift jedoch ein Bereich, der lässt mich wirklich ratlos ist Generatoren und Sequenzen (Ich bin gut mit dem Konzept der Protokolle durch die Weg).Generics mit Generatoren und Sequenzen in Swift
ZB abgeschlossen ich diese Übung von dem Swift-Führer (Apple)
„-Experiment die anyCommonElements Funktion Ändern einer Funktion zu machen, das eine Anordnung der Elemente zurückgibt, die beliebige zwei Sequenzen gemeinsam haben.“
Drehen dieses:
func anyCommonElements <T, U where T: SequenceType, U: SequenceType, T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
In diese:
func anyCommonElements <T, U where T: SequenceType, U: SequenceType, T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, rhs: U) -> [T.Generator.Element]? {
var commonElements:[T.Generator.Element]? = nil
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
if (commonElements == nil)
{
commonElements = [] //init the array if not already
}
commonElements?.append(lhsItem) //add matching item to the array
}
}
}
return commonElements? //return nil or array of matched elements
}
Ich bin zufrieden mit der Lösung, die ich geschrieben habe und es funktioniert gut, einschließlich der optionalen Rückkehr, aber ich bin verloren, warum die Art der commonElements zurückgeben Array Bedürfnisse dieser sein:
var commonElements:[T.Generator.Element]
Anstatt dies:
var commonElements:[T]
ich ein gutes Stück über das Thema gelesen haben, einschließlich:
https://schani.wordpress.com/2014/06/06/generators-in-swift/
http://robots.thoughtbot.com/swift-sequences
http://natashatherobot.com/swift-conform-to-sequence-protocol/
Aber ich bin völlig verloren noch - kann jemand bitte erklären helfen, dies in einfachen Worten oder ist es nur ein wenig abstrakt und nicht leicht zu beschreiben?
es wirklich schätzen würde, Danke, John
Ist das Problem, dass Sie nicht verstehen, wo die Namen 'Generator' und' Sequence' kommen? Oder verstehst du nicht, was sie bedeuten? – matt
** Als Nebenbei beantwortet das die Frage nicht, sondern adressiert das Experiment **: Es wäre interessanter, einen Generator zurückzugeben, damit Lazy-Loading noch wirksam sein kann. Das Problem, zu dem Sie aufgefordert wurden, zu lösen, zwingt Sie, alle zu vergleichenden Elemente zu laden und dann ein gefülltes Array zurückzugeben. –
@matt beides denke ich! – Woodstock