1 | // overloading on return type
|
---|
2 | func random() -> Int { 3; }
|
---|
3 | func random() -> String { "abc"; }
|
---|
4 | func random() -> Double { 3.5; }
|
---|
5 | var r1 : Int = random();
|
---|
6 | print( r1 );
|
---|
7 | var r2 : String = random();
|
---|
8 | print( r2 );
|
---|
9 | var r3 : Double = random();
|
---|
10 | print( r3 );
|
---|
11 |
|
---|
12 | // function overloading without parameter names
|
---|
13 | //func fun( _ x : Int ) { 3; }
|
---|
14 | //func fun( _ x : Int, _ y : Int ) { 3; }
|
---|
15 | func fun( _ x : Double ) { 3; }
|
---|
16 | func fun( _ x : Int ) -> Int { 3; }
|
---|
17 | func fun( _ x : Int, _ y : Int ) -> Int { x + y; }
|
---|
18 | func fun( _ x : String ) -> String { "abc"; }
|
---|
19 | print( fun( 3, 4 ) );
|
---|
20 | // print( fun( 3.5 ) ); // no Double -> Int
|
---|
21 | //print( fun( r3 ) ); // no, Double -> Int
|
---|
22 |
|
---|
23 | // overloading on parameter name
|
---|
24 | func foo( x : Int ) -> Int { 3; }
|
---|
25 | func foo( y : Int ) -> Int { 3; }
|
---|
26 | print( foo( x : 3 ) );
|
---|
27 | print( foo( y : 3 ) );
|
---|
28 |
|
---|
29 | // overloading on member name
|
---|
30 | class C {
|
---|
31 | func foo() {}
|
---|
32 | func foo( _ x: Int ) -> Int { 3; }
|
---|
33 | func foo( _ x : Double, _ y : Double ) -> Double { x + y; }
|
---|
34 | func foo( _ x : String ) -> String { "abc"; }
|
---|
35 | }
|
---|
36 |
|
---|
37 | let c = C()
|
---|
38 | c.foo();
|
---|
39 | r1 = c.foo( 3 );
|
---|
40 | r3 = c.foo( 3, 3.5 );
|
---|
41 | r2 = c.foo( "abc" );
|
---|
42 |
|
---|
43 | // generic overloading without parameter names
|
---|
44 | func bar<T>( _ a : T ) { print( "bar1", a ); }
|
---|
45 | func bar<T>( _ a : T, _ b : T ) { print( "bar2", a, b ); }
|
---|
46 | func bar<T,U>( _ a : T, _ b : U) { print( "bar3", a, b ); }
|
---|
47 | bar( 3 );
|
---|
48 | bar( 3.5 );
|
---|
49 | bar( 2, 2 );
|
---|
50 | bar( 2, 2.5 );
|
---|
51 |
|
---|
52 | // generic overloading with parameter names
|
---|
53 | func baz( a : Int ) { print( "baz1", a ); }
|
---|
54 | func baz<T>( a : T ) { print( "baz1", a ); }
|
---|
55 | func baz<T>( a : T, b : T ) { print( "baz2", a, b ); }
|
---|
56 | func baz<T,U>( a : T, b : U ) { print( "baz3", a, b ); }
|
---|
57 | baz( a : 3 );
|
---|
58 | baz( a : 3.5 );
|
---|
59 | baz( a : 2, b : 2 );
|
---|
60 | baz( a : 2, b : 2.5 );
|
---|
61 | func swap<T>( _ a : inout T, _ b : inout T ) { let temp : T = a; a = b; b = temp; }
|
---|
62 | var ix = 4, iy = 3;
|
---|
63 | swap( &ix, &iy );
|
---|
64 | print( ix, iy );
|
---|
65 | var fx = 4.5, fy = 3.5;
|
---|
66 | swap( &fx, &fy );
|
---|
67 | print( fx, fy );
|
---|
68 | // Local Variables: //
|
---|
69 | // compile-command: "swift test.swift" //
|
---|
70 | // End: //
|
---|