22
33import UIKit
44
5- // protocol as a way of declaring an abstract method to be inherited and implemented by subclasses
6- @objc protocol MyXMLParserDelegateProtocol {
7- optional func finishedChild( s: String )
8- }
95
10- class MyXMLParserDelegate : NSObject , NSXMLParserDelegate , MyXMLParserDelegateProtocol {
11- var text = " "
6+ class MyXMLParserDelegate : NSObject {
127 var name : String !
8+ var text = " "
139 weak var parent : MyXMLParserDelegate ?
1410 var child : MyXMLParserDelegate !
1511
16- required init ( name: String ! , parent: MyXMLParserDelegate ! ) {
12+ required init ( name: String , parent: MyXMLParserDelegate ? ) {
1713 self . name = name
1814 self . parent = parent
1915 super. init ( )
@@ -24,21 +20,24 @@ class MyXMLParserDelegate : NSObject, NSXMLParserDelegate, MyXMLParserDelegatePr
2420 self . child = del
2521 parser. delegate = del
2622 }
23+ func finishedChild( s: String ) {
24+ fatalError ( " Subclass must implement finishedChild:! " )
25+ }
2726
28- // func finishedChild(s:String) {} // subclass may implement as desired
29-
30- // NSXMLParser delegate messages
31-
27+ }
28+
29+ extension MyXMLParserDelegate : NSXMLParserDelegate {
3230 func parser( parser: NSXMLParser , foundCharacters string: String ! ) {
3331 self . text = self . text + string
3432 }
3533
3634 func parser( parser: NSXMLParser , didEndElement elementName: String ! , namespaceURI: String ! , qualifiedName qName: String ! ) {
3735 if self . parent != nil {
38- // rather tricky syntax to allow calling optional method; bug in Swift?
39- ( self . parent! as MyXMLParserDelegateProtocol ) . finishedChild ? ( self . text)
36+ self . parent!. finishedChild ( self . text)
4037 parser. delegate = self . parent
4138 }
4239 }
4340
4441}
42+
43+
0 commit comments