เหตุใด UITextfField ของฉันจึงดูเหมือนจะไม่เป็นศูนย์แม้ว่าฉันจะปล่อยฟิลด์ว่างไว้ก็ตาม ส่วนอื่นของฉันในคำสั่ง if ไม่ได้รับการอ่าน

ฉันกำลังฝึกการเขียนโปรแกรมที่รวดเร็วโดยการสร้างแอปที่เก็บข้อมูลของลูกค้า แอปมีช่องข้อความหลายช่องให้ผู้ใช้พิมพ์ชื่อ ที่อยู่อีเมล หมายเลขโทรศัพท์ และจำนวนสินค้าที่ซื้อ จากนั้นด้วยปุ่ม 'ส่ง' พวกเขาจะบันทึกข้อมูลนั้นลงในฐานข้อมูล อย่างไรก็ตาม หากช่องใดช่องหนึ่งว่างเปล่า ก็ควรเกิดข้อผิดพลาดและข้อความควรปรากฏแก่ผู้ใช้เพื่อแจ้งให้ผู้ใช้ทราบว่าช่องใดช่องหนึ่งว่างเปล่า

ปัญหาคือแม้ว่าฟิลด์ข้อความจะว่างเปล่า แต่คอมไพเลอร์กลับอ่านค่าเป็นศูนย์ไม่ได้ ดังนั้นสภาพของฉันจึงไม่ทำงาน

เพื่อความง่าย ฉันละเว้นโค้ดจำนวนมาก ฉันจะทำงานกับ UITextField เดียวเท่านั้น (ชื่อลูกค้า) และเงื่อนไขของฉันจะตรวจสอบว่า TextField ว่างเปล่าหรือไม่ หากว่างเปล่า ควรพิมพ์ว่า "กรุณากรอกชื่อที่ถูกต้อง" หากไม่ใช่ศูนย์ก็ควรพิมพ์ชื่อลูกค้า

class RaffleViewControler: UIViewController, UITextFieldDelegate {


    @IBOutlet weak var customerNameTextField: UITextField!

    @IBAction func addCustomerName(_ sender: UITextField) {


    }


    @IBOutlet weak var submitButton: UIButton!


    @IBAction func submitCustomer(_ sender: UIButton) {

           if let name = customerNameTextField.text {
            print(name)

        } else {
            print("Please enter a valid name")
        }
}

หรืออีกวิธีหนึ่ง ฉันกำลังตรวจสอบสภาพของตัวเองในรูปแบบต่อไปนี้:

@IBAction func submitCustomer(_ sender: UIButton) {

               if customerNameTextField.text != nil {
                print("Congrats. Your data is in our database")

            } else {
                print("Please enter a valid name")
            }
  }

ปัญหา:

แม้ว่าฉันจะปล่อยฟิลด์ข้อความว่างไว้ คอมไพเลอร์จะไม่อ่านส่วน "else" ของเงื่อนไข ซึ่งดูเหมือนว่าจะบ่งบอกว่าสนามไม่เคยเป็นศูนย์ อะไรจะเกิดขึ้น?


person Nando    schedule 10.11.2017    source แหล่งที่มา
comment
ขออภัย แต่เพื่อให้แน่ใจว่าไม่มีค่าจากตัวสร้างอินเทอร์เฟซอยู่แล้วใช่ไหม   -  person MQLN    schedule 10.11.2017
comment
ฟิลด์ข้อความมีคุณสมบัติที่เรียกว่า hasText if customerNameTextField.hasText {. อีกทางเลือกหนึ่งคือทดสอบว่าไม่ว่างเปล่าหรือไม่โดยตรวจสอบคุณสมบัติข้อความ if customerNameTextField.text?.isEmpty == false {   -  person Leo Dabus    schedule 10.11.2017
comment
อย่างไรก็ตาม มีการถามเรื่องนี้หลายครั้งแล้วทั่วทั้งเว็บ   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus คุณอาจคิดถึง UITextView ฉันไม่พบ hasText เป็นคุณสมบัติของ UITextField ในเอกสาร Apple   -  person Mike Taverne    schedule 10.11.2017
comment
@MikeTaverne ไม่ ฉันกำลังพูดถึง UITextField จริงๆแล้วทั้งสองคน   -  person Leo Dabus    schedule 10.11.2017
comment
ฟิลด์ข้อความเมื่อคุณไม่ได้ป้อนค่าใด ๆ เพื่อให้ค่านั้นเป็นเพราะชนิดข้อมูลนั้นในสตริง   -  person Sagar Bhut    schedule 10.11.2017
comment
@MikeTaverne นั่นเป็นเพราะมันเป็นคุณสมบัติอินสแตนซ์ของ UIKeyInput developer.apple.com/documentation /uikit/uikeyinput/ แต่ใช้ได้เฉพาะ iOS10+ เท่านั้น   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus คุณพูดถูก   -  person Mike Taverne    schedule 10.11.2017


คำตอบ (3)


ตามเอกสารของ Apple:

สตริงนี้คือ @"" ตามค่าเริ่มต้น

เช่น. มันไม่ได้เป็นศูนย์โดยค่าเริ่มต้น

person Mike Taverne    schedule 10.11.2017

หากต้องการตรวจสอบ UITextField ที่ว่างเปล่าคุณสามารถใช้ได้ง่ายๆ

txtFieldName.text?.isEmpty

สิ่งนี้จะให้ค่า BOOL แก่คุณ

person singh.jitendra    schedule 10.11.2017
comment
ซึ่งจะให้ค่า Bool? แก่คุณ (หรืออีกนัยหนึ่งคือค่าเผื่อเลือก) - person rmaddy; 10.11.2017
comment
เพียงเพื่อเสริมความคิดเห็นของ rmaddy อาจเป็น true, false หรือ nil (โปรดทราบว่าค่าเริ่มต้นของมันคือสตริงว่าง แต่คุณยังต้องขู่ว่าจะเป็นทางเลือก) ดังนั้นคุณต้องเพิ่ม == true หรือ == false - person Leo Dabus; 10.11.2017
comment
@LeoDabus อีกตัวเลือกหนึ่งนอกเหนือจากการเพิ่ม == true (เนื่องจากตัวเลือกเสริม) คุณสามารถใช้ if txtFieldName.text!.isEmpty { ได้เนื่องจาก text จะไม่เป็น nil จริงๆ แม้ว่าคุณจะตั้งค่าเป็น nil การอ่านทันทีจะคืนค่า "" - person rmaddy; 10.11.2017
comment
@rmaddy นั่นเป็นเรื่องจริงคุณสามารถบังคับแกะมันได้โดยไม่มีความผิดใด ๆ แต่ฉันชอบ == true จริงๆ แล้วฉันใช้คุณสมบัติ hasText ฉันใช้ == true สำหรับ Bool เสริมเท่านั้น นอกเหนือจากคุณสมบัติข้อความของช่องข้อความ - person Leo Dabus; 10.11.2017
comment
เรานอกเรื่องไปแล้ว คำถาม OP คือเหตุใดข้อความ != nil จึงไม่ตรงตามเงื่อนไข - person Mike Taverne; 10.11.2017

คุณสามารถตรวจสอบ:

if self.customerNameTextField.text == "" {
// An empty text field.
} else {
// Not empty.
}
person Mannopson    schedule 10.11.2017