ios - GeneratorOf<T> Cannot find an initializer Error -
my attempts understand generators , sequences lead me idea implement fibonacci sequence. works perfect:
struct fibonaccigenerator : generatortype { typealias element = int var current = 0, nextvalue = 1 mutating func next() -> int? { let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } } struct fibonaccisequence : sequencetype { typealias generator = fibonaccigenerator func generate() -> generator { return fibonaccigenerator() } } then decide use sequenceof , generatorof same, stuck on generatorof gives me error "cannot find initializer type 'generatorof' accepts argument list of type '(() -> _)'" next code.
var current = 0 var nextvalue = 1 var fgof = generatorof{ let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } 
but if wrap function works fine:
func getfibonaccigenerator() -> generatorof<int> { var current = 0 var nextvalue = 1 return generatorof{ let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } } why works differently? xcode bug or miss something?
the closure used in initializer of generatorof has type () -> t?, , in
var fgof = generatorof { let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } the compiler cannot infer t is. can either make block signature explicit
var fgof = generatorof { () -> int? in let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } or specify type of generator with
var fgof = generatorof<int> { let ret = current current = nextvalue nextvalue = nextvalue + ret return ret } in last example
func getfibonaccigenerator() -> generatorof<int> { // ... return generatorof { // ... return ret } } it works because type inferred context (i.e. return type of getfibonaccigenerator()).
Comments
Post a Comment