Both protocol and implement have same name and type, however different Optional Type value.

protocol TTTT {

    var sid: String? { get set }

}

class ViewController: UIViewController {



    var sid: String = ""

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

        

    }

}

extension ViewController: TTTT {

    

    var sid: String? {

        get {

       

        }

        set {

            

        }

    }

}

error: Invalid redeclaration of 'sid'

Answered by Claude31 in 695868022

Why are you surprised ?

1. protocol TTTT {
2. 
3.     var sid: String? { get set }
4. 
5. }
6. 
7. class ViewController: UIViewController {
8. 
9.     var sid: String = ""
10. 
11.     override func viewDidLoad() {
12. 
13.         super.viewDidLoad()
14. 
15.         // Do any additional setup after loading the view.
16. 
17.     }
18. }
19. 
20. extension ViewController: TTTT {
21. 
22.     var sid: String? {
23. 
24.         get {
25.             // Need some return value
26.         }
27. 
28.         set {
29. 
30.         }
31.     }
32. }

Line 22, whatever type you give to sid

    var sid: String? {

is a redeclaration of the class property at line 9:

    var sid: String = ""

You would have the same error with

    var sid: String? = ""

Of course, the following does work:

protocol TTTT {

    var sid2: String? { get set }

}

class ViewController: UIViewController {

    var sid: String? = ""

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.
         sid = sid2       // <<-- set sid property
    }
}

extension ViewController: TTTT {

    var sid2: String? {

        get {
             return ""
        }

        set {

        }
    }
}

Note: it is not a good practice to reuse same names in such situations.

Accepted Answer

Why are you surprised ?

1. protocol TTTT {
2. 
3.     var sid: String? { get set }
4. 
5. }
6. 
7. class ViewController: UIViewController {
8. 
9.     var sid: String = ""
10. 
11.     override func viewDidLoad() {
12. 
13.         super.viewDidLoad()
14. 
15.         // Do any additional setup after loading the view.
16. 
17.     }
18. }
19. 
20. extension ViewController: TTTT {
21. 
22.     var sid: String? {
23. 
24.         get {
25.             // Need some return value
26.         }
27. 
28.         set {
29. 
30.         }
31.     }
32. }

Line 22, whatever type you give to sid

    var sid: String? {

is a redeclaration of the class property at line 9:

    var sid: String = ""

You would have the same error with

    var sid: String? = ""

Of course, the following does work:

protocol TTTT {

    var sid2: String? { get set }

}

class ViewController: UIViewController {

    var sid: String? = ""

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.
         sid = sid2       // <<-- set sid property
    }
}

extension ViewController: TTTT {

    var sid2: String? {

        get {
             return ""
        }

        set {

        }
    }
}

Note: it is not a good practice to reuse same names in such situations.

Both protocol and implement have same name and type, however different Optional Type value.
 
 
Q