swift - Returning protocol type -


i have protocol graphtype can have specific implementations:

protocol graphtype {     var vertexcount: int {get}     var edgecount: int {get}     init(vertexcount: int)     ... } 

then have function construct mst:

func primsmst(graph: graphtype) -> graphtype {     let ret = graph.dynamictype(vertexcount: graph.vertexcount)      return ret } 

there no direct compiler warning in code, compiler complains function:

  1. while emitting ir sil function @_tf10swiftstuff8primsmstfps_9graphtype_ps0__ 'primsmst' @ /users/aeubanks/dropbox/programming/apps/swiftstuff/swiftstuff/mst.swift:9:1

    command failed due signal: segmentation fault: 11

this shouldn't problem right? function takes in object implements graphtype , returns arbitrary graphtype happens same input. when replace graph.dynamictype specific implementation graphadjacencylist without changing return type compiles, prefer if return type same class inputted graph. auto-correct says ret of graphtype. way solve this?

use generic function. here's reduced version of code:

protocol graphtype {     var vertexcount: int {get}     init(vertexcount: int) } func primsmst<t:graphtype>(what:t) -> graphtype {     let result = t(vertexcount:what.vertexcount)     return result } 

let's try out. i'll define struct adopts graphtype:

struct st : graphtype {     var vertexcount = 0     init(vertexcount:int) {         self.vertexcount = vertexcount     } } 

here go....

    let st = st(vertexcount:25)     let result = primsmst(st) 

a little logging / breakpointing show result want be.


Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -