Swift 3可比协议
问题描述:
创建一个名称结构。名称包含两部分名字(也称为给定的 姓名或个人姓名)和姓氏(家人或姓氏)。名称结构应该 实现可比较协议。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)
答
在美国,默认是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
}
}
}
答
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)
}
}
您可能要修改你的问题,并已经提供了你试过。 – Zico