2015-02-06 5 views
0

Есть ли ключевое слово для размещения параметров неиспользуемого типа?Параметр неиспользуемого типа в swift

В этом примере receiver не использует T из MyGen. На языке Java можно написать MyGen<?> v. Я не могу найти аналога в документах быстрого перевода.

import Foundation 
class MyGen<T: Printable> { 
    var value: T 
    init(v: T) { 
     value = v 
    } 
} 

func receiver(v: MyGen<WHAT_COMES_HERE>) { 
    println(v); 
} 

let s = MyGen<NSString>(v: "hello") 
receiver(s) 

Я знаю, что дает receiver параметр типа решает проблему, но это не приветствуется, потому что верхняя граница Printable повторяется столько, сколько функций и код имеет избыточную информацию.

// This works, but not welcome 
func receiver<T: Printable>(v: MyGen<T>) { 
    println(v); 
} 

ответ

0

В Swift, несмотря на то, что он не используется, вы должны объявить параметры типа. Но здесь вам не нужно :Printable, вы можете использовать только T или что угодно, как вам нравится.

func receiver<A>(v: MyGen<A>) { 
    println(v) 
} 

Использование : для параметра типа, только если receiver требует более специализированной MyGet.T. Например:

class MyGen<T: Printable> { 
    var value: T 
    init(v: T) { 
     value = v 
    } 
} 

// `receiver` accepts `MyGen` only if its `T` is a sequence of `Int` 
func receiver<A: SequenceType where A.Generator.Element == Int>(v: MyGen<A>) { 
    println(reduce(v.value, 0, +)) 
} 

let s = MyGen<[Int]>(v: [1,2,3]) 
receiver(s) // -> 6 
Смежные вопросы