[swift-users] Optionals and method overloading with Any

Don Wills don.wills at portablesoftware.com
Wed Jan 6 21:16:52 CST 2016

I really don't understand optionals.  This code fails with "Call can throw, but is not marked with try ..." on the program line:    t1.mth("abc", s1);

class Test {
	private var s1 : String!

	func tst() {
		let t1 : Test1 = Test1()
		t1.mth("abc", s1)

class Test1 {
	func mth(p1 : String, _ p2 : String) -> String {
		return p1

	func mth(p1 : String, _ p2 : Any) throws -> String {
		return p1

but the program compiles fine if I change the code in either of these two manners:

1. I define s1 as non-optional like this:  private var s1 = "", or

2. I remove the second overloaded mth method (the one with "_ p2 : Any" as the second parameter and the throws clause)

Swift method lookup obviously chose the second mth func if it exists, but why?


More information about the swift-users mailing list