2016-09-18 142 views
-1

创建一个名称结构。名称包含两部分名字(也称为给定的 姓名或个人姓名)和姓氏(家人或姓氏)。名称结构应该 实现可比较协议。Swift 3可比协议

我用下面的代码尝试,但我不知道如何包含给定名称,personalName,familyName和姓在比较

struct Name : Comparable { 
let firstName : String 
let lastName: String 

init(firstName : String, lastName:String) { 
    self.firstName = firstName 
    self.lastName=lastName 
} 
}func < (lhs: Name, rhs: Name) -> Bool { 
return lhs.firstName < rhs.firstName && lhs.lastName < rhs.lastName 
}func == (lhs: Name, rhs: Name) -> Bool { 
return lhs.firstName == rhs.firstName && lhs.lastName == rhs.lastName 
} 

let firstName = Name(firstName: "Paul", lastName: "Smith") 
let givenName = Name(firstName: "Paul" , lastName: "Smithe") 
let personalName = Name(firstName: "Paul", lastName: "Smith") 
print (firstName == givenName) 
+0

您可能要修改你的问题,并已经提供了你试过。 – Zico

回答

3

在美国,默认是lastName先进行排序,firstName第二。你可以改变这一点,如果它在你的国家不同:

struct Name: Comparable { 
    var firstName: String 
    var lastName: String 

    static func == (lhs: Name, rhs: Name) -> Bool { 
     return (lhs.firstName == rhs.firstName) && (lhs.lastName == rhs.lastName) 
    } 

    // Provide the ordering for 2 names by comparing lastName first, for example: 
    //  Jane Austen < Alan Smith 
    //  Alan Smith < John Smith 
    static func < (lhs: Name, rhs:Name) -> Bool { 
     if lhs.lastName != rhs.lastName { 
      return lhs.lastName < rhs.lastName 
     } else if lhs.firstName != rhs.firstName { 
      return lhs.firstName < rhs.firstName 
     } else { 
      return false 
     } 
    } 
} 
+0

我应该忽略问题中提及的surName familyName personalName和givenName吗? – Hadeel

+0

你是什么意思?姓氏,姓氏和姓氏都是用英语表示的同一件事:你从你父亲那里继承的名字的一部分。同样,名字=给定的名字 – Jenny

+0

我知道,但因为他们在问题中提到,我想到枚举类型 – Hadeel

1
class ViewController: UIViewController, myprotocol{ 

    @IBOutlet weak var lbl1: UILabel! 
    @IBOutlet weak var text1: UITextField! 

    func testfirst(info:String) { 

     lbl1.text = info as String 
    } 




    override func viewDidLoad() { 
     super.viewDidLoad() 


    } 

     @IBAction func btnshow(_ sender: UIButton) 
    { 

     let storyBoard = UIStoryboard(name: "Main", bundle: nil) 

     let svc = storyBoard.instantiateViewController(withIdentifier: "secondViewController") as! secondViewController 
     svc.delegate = self 

     svc.str = text1.text! 



     self.navigationController?.pushViewController(svc, animated: true) 

    } 

2)

protocol myprotocol { 

    func testfirst(info:String) 
} 

3)

class secondViewController: UIViewController { 


    var delegate : myprotocol? 

    @IBOutlet weak var lbl2: UILabel! 
    @IBOutlet weak var txt2: UITextField! 


    var str = String() 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 

     lbl2.text = str 
    } 



    @IBAction func btn2(_ sender: UIButton) 
    { 
     if (delegate != nil) 
     { 
      let information:String = lbl2.text!+txt2.text! 

      delegate?.testfirst(info: information) 

      self.navigationController?.popViewController(animated: true) 
     } 
    }