คำถามติดแท็ก swift-language

Swift เป็นภาษาโปรแกรมที่ออกแบบโดย Apple สำหรับสร้างแอพ iOS และ OS X Swift สร้างขึ้นจากรากฐานของ C และ Objective-C

5
Swift จะเร็วกว่า Objective-C มากในการเปรียบเทียบเหล่านี้อย่างไร
แอปเปิ้ลเปิดตัวภาษาโปรแกรมใหม่ของสวิฟท์ที่WWDC14 ในการนำเสนอพวกเขาทำการเปรียบเทียบประสิทธิภาพระหว่าง Objective-C และ Python ต่อไปนี้เป็นรูปภาพของหนึ่งในสไลด์ของการเปรียบเทียบภาษาทั้งสามที่ดำเนินการเรียงลำดับวัตถุที่ซับซ้อน มีกราฟที่น่าทึ่งยิ่งขึ้นเกี่ยวกับการเปรียบเทียบประสิทธิภาพโดยใช้อัลกอริทึมการเข้ารหัสRC4 เห็นได้ชัดว่านี่คือการพูดคุยด้านการตลาดและพวกเขาไม่ได้ลงรายละเอียดเกี่ยวกับวิธีการนำไปใช้ในแต่ละครั้ง ฉันทิ้งฉันสงสัยว่า: ภาษาการเขียนโปรแกรมใหม่จะเร็วขึ้นได้อย่างไร? ผลลัพธ์ Objective-C เกิดจากคอมไพเลอร์ที่ไม่ดีหรือมีบางสิ่งที่มีประสิทธิภาพน้อยกว่าใน Objective-C กว่า Swift หรือไม่? คุณจะอธิบายประสิทธิภาพที่เพิ่มขึ้น 40% ได้อย่างไร ฉันเข้าใจว่าการรวบรวมขยะ / การควบคุมการอ้างอิงอัตโนมัติอาจทำให้เกิดโอเวอร์เฮดเพิ่มเติม

10
เหตุใดโปรแกรมจึงใช้การปิด
หลังจากอ่านโพสต์มากมายที่อธิบายการปิดที่นี่ฉันยังขาดแนวคิดหลัก: ทำไมต้องเขียนการปิด โปรแกรมเมอร์คนใดที่จะทำหน้าที่เฉพาะเจาะจงซึ่งอาจได้รับผลงานที่ดีที่สุดโดยการปิดงาน? ตัวอย่างของการปิดใน Swift เป็นการเข้าถึงของ NSUrl และการใช้ Reverse Geocoder นี่คือตัวอย่างหนึ่ง น่าเสียดายที่หลักสูตรเหล่านั้นเพิ่งจะปิดตัวลง พวกเขาไม่ได้อธิบายว่าทำไมการเขียนโค้ดจึงเป็นการปิด ตัวอย่างของปัญหาการเขียนโปรแกรมในโลกแห่งความจริงที่อาจทำให้สมองของฉันพูดว่า "อ้าฉันควรเขียนเรื่องนี้ให้จบ" จะให้ข้อมูลมากกว่าการอภิปรายเชิงทฤษฎี ไม่มีการขาดแคลนของการอภิปรายทางทฤษฎีที่มีอยู่ในเว็บไซต์นี้

1
อนุสัญญาการตั้งชื่อโปรโตคอล Swift [ปิด]
มาจากพื้นหลังส่วนใหญ่ c # ฉันเคยใช้คำว่า "อินเตอร์เฟส" สำหรับการอธิบายวัตถุที่ไม่มีการใช้งานที่กำหนดพฤติกรรม ใน c # การประชุมคือการเพิ่มชื่อส่วนต่อประสานด้วย "I" เช่นในIEnumerableเป็นต้น แน่นอนว่าแนวคิดนี้มีชื่อแตกต่างกันในภาษาต่างๆ ใน Swift แนวคิดเดียวกันนี้เรียกว่า "โปรโตคอล" เมื่อฉันพัฒนาโปรโตคอลฉันมักจะมีชื่อคล้ายกันมากสำหรับโปรโตคอลและคลาสที่ใช้งานมัน จนถึงตอนนี้ฉันได้ต่อท้ายคำว่า "โปรโตคอล" กับวัตถุเหล่านี้ในลักษณะเดียวกับที่ฉันใช้ "I" ใน c #, ในEnumerableProtocol, ฯลฯ มีความคิดเห็นเกี่ยวกับการตั้งชื่อโปรโตคอลสำหรับโพรโทคอลอย่างรวดเร็วหรือไม่?

8
ทำไมจึงต้องออกแบบภาษาสมัยใหม่โดยไม่มีกลไกการจัดการยกเว้น?
ภาษาสมัยใหม่หลายคนให้การจัดการข้อยกเว้นที่อุดมไปด้วยคุณสมบัติ แต่แอปเปิ้ลของการเขียนโปรแกรมภาษาสวิฟท์ไม่ได้ให้กลไกการจัดการข้อยกเว้น ขณะที่ฉันกำลังจมดิ่งอยู่ในข้อยกเว้นฉันมีปัญหาในการคิดสิ่งที่มันหมายถึง Swift มีคำยืนยันและแน่นอนว่ามีค่าตอบแทน แต่ฉันกำลังมีปัญหาในการนึกภาพว่าวิธีคิดตามข้อยกเว้นของฉันทำแผนที่โลกโดยไม่มีข้อยกเว้น (และสำหรับเรื่องนั้นทำไมโลกเช่นนี้เป็นที่น่าพอใจ ) มีสิ่งใดบ้างที่ฉันไม่สามารถทำได้ในภาษาอย่าง Swift ที่ฉันสามารถทำได้ด้วยข้อยกเว้น ฉันจะได้รับบางอย่างจากการสูญเสียข้อยกเว้น? ยกตัวอย่างเช่นฉันจะแสดงสิ่งที่ดีที่สุดได้อย่างไร try: operation_that_can_throw_ioerror() except IOError: handle_the_exception_somehow() else: # we don't want to catch the IOError if it's raised another_operation_that_can_throw_ioerror() finally: something_we_always_need_to_do() ในภาษา (ตัวอย่างเช่น Swift) ที่ไม่มีการจัดการข้อยกเว้น?

2
ภาษาสมัยใหม่ยังใช้เครื่องแยกวิเคราะห์หรือไม่?
ฉันกำลังค้นคว้าเกี่ยวกับชุดคอมไพเลอร์ gcc ในวิกิพีเดียที่นี่เมื่อสิ่งนี้เกิดขึ้น: GCC เริ่มต้นใช้ตัวแยกวิเคราะห์ LALR ที่สร้างด้วย Bison แต่ค่อย ๆ เปลี่ยนเป็นตัวแยกวิเคราะห์แบบสืบเชื้อสายแบบเขียนด้วยมือซ้ำ; สำหรับ C ++ ในปี 2004 และสำหรับ C และ Objective-C ในปี 2549 ปัจจุบันส่วนหน้าทั้งหมดใช้ตัวแยกวิเคราะห์ที่เขียนด้วยมือแบบเรียกซ้ำ ดังนั้นด้วยประโยคสุดท้ายนั้น (และสำหรับที่ฉันไว้ใจ wikipedia) ฉันสามารถพูดได้อย่างแน่นอนว่า "C (gcc), C ++ (g ++), Objective-C, Objective-C ++, Fortran (gfortran), Java (gcj), Ada (GNAT), Go (gccgo), Pascal (gpc), ... Mercury, Modula-2, Modula-3, …


3
การดิ้นรนกับการขึ้นต่อเนื่องของวงจรในการทดสอบหน่วย
ฉันพยายามฝึกฝน TDD โดยใช้มันเพื่อพัฒนาวิเช่น Bit Vector ฉันบังเอิญใช้สวิฟท์ แต่นี่เป็นคำถามที่ไม่เชื่อเรื่องภาษา My BitVectoris คือตัวstructที่เก็บ single UInt64และนำเสนอ API เหนือมันที่ให้คุณปฏิบัติต่อมันเหมือนกับคอลเลกชัน รายละเอียดไม่สำคัญมาก แต่มันค่อนข้างง่าย 57 บิตสูงเป็นบิตหน่วยเก็บข้อมูลและ 6 บิตด้านล่างเป็นบิต "นับ" ซึ่งจะบอกคุณว่าบิตหน่วยเก็บข้อมูลจำนวนหนึ่งเก็บค่าที่มีอยู่จริงได้อย่างไร จนถึงตอนนี้ฉันมีความสามารถที่เรียบง่ายไม่กี่อย่าง: เครื่องมือเริ่มต้นที่สร้างเวกเตอร์บิตที่ว่างเปล่า countทรัพย์สินของประเภทInt isEmptyทรัพย์สินของประเภทBool ตัวดำเนินการความเสมอภาค ( ==) หมายเหตุ: นี่เป็นตัวดำเนินการค่าความเท่าเทียมกันObject.equals()ใน Java ไม่ใช่ตัวดำเนินการความเท่าเทียมกันอ้างอิงเช่น==ใน Java ฉันวิ่งเข้าไปในกลุ่มพึ่งพาพึ่งพาวงจร: BitVectorหน่วยทดสอบที่ทดสอบความจำเป็นในการเริ่มต้นของฉันที่จะตรวจสอบว่ามีการสร้างขึ้นใหม่ สามารถทำได้หนึ่งใน 3 วิธี: ตรวจสอบ bv.count == 0 ตรวจสอบ bv.isEmpty == true ตรวจสอบว่า bv == …

2
ทำไมสวิฟต์ไม่ต้องใช้เครื่องหมายอัฒภาค? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ปกติฉันเขียนโค้ดใน c # หรือ Objective-C และเมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ภาษาการเขียนโปรแกรมใหม่ของ Apple - Swift สิ่งแรกที่ฉันสังเกตเห็นคือคุณไม่จำเป็นต้องเพิ่มเครื่องหมายอัฒภาคเพื่อจบบรรทัดใน Swift แต่ถ้าคุณทำอย่างน้อยจากสิ่งที่ฉันทดสอบ - มันไม่รบกวนคอมไพเลอร์ เมื่อฉันเขียน: int someNumber = 0; ใน Objective-C เครื่องหมายอัฒภาคจะบอกโปรแกรมว่าบรรทัดนั้นสิ้นสุดลงและจะไม่ผ่านไปยังบรรทัดถัดไป ด้วย Swift ฉันสามารถประกาศตัวแปรด้วย var someNumber:Int = 5 และไม่เพิ่มเซมิโคลอนและระบบรู้ว่านี่คือจุดสิ้นสุดของบรรทัด อะไรทำให้บางภาษาทำสิ่งนี้และคนอื่น ๆ ไม่ได้? ทำไมไม่เก็บระบบที่เป็นรูปแบบเดียวกันของการเพิ่มเครื่องหมายอัฒภาคไว้ที่ท้าย?

3
ด้วยเหตุผลใดบ้างที่คุณจะใช้ส่วนขยายคลาสแยกต่างหากสำหรับตัวแทนแต่ละคนใน Swift
ฉันทำงานผ่านการสอนของ Ray Wenderlich และสังเกตว่าผู้เขียนใช้ส่วนขยายคลาสเพื่อระงับการโทรกลับแทนที่จะมอบหมายให้จัดการในคลาสเองเช่น: มอบหมาย callback ภายในส่วนขยายของชั้นเรียน: extension LogsViewController : UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ตรงข้ามกับการมีอยู่ในชั้นเรียน: มอบหมายการเรียกกลับภายในชั้นเรียน: class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } ฉันพบสิ่งนี้แปลกและน่าสนใจในเวลาเดียวกัน เขามีไฟล์เฉพาะสำหรับการขยายในคลาส LogsViewController ชื่อ "LogsViewControllerExtension.swift" และมีส่วนขยายที่แตกต่างกันสำหรับแต่ละโพรโทคอลของผู้แทน: UITableViewDataSource, UISplitViewDelegate …

3
เป็นวิธีปฏิบัติที่ดีที่จะรวมชุดของคุณสมบัติที่เกี่ยวข้องไว้ในโครงสร้าง / คลาสของตัวเองหรือไม่?
การเขียนวัตถุผู้ใช้ในสวิฟท์ แต่คำถามของฉันเกี่ยวข้องกับภาษาที่พิมพ์ออกมาอย่างรุนแรง ผู้ใช้สามารถมีลิงก์จำนวนมาก (FacebookProfile, InstagramProfile, ฯลฯ ) คำถามสองสามข้อเกี่ยวกับเรื่องนี้ เป็นการดีที่จะรวมลิงก์ในวัตถุของตนเองหรือไม่? struct ผู้ใช้ { var firstName: string var lastName: string อีเมล var: สตริง ลิงก์ var: ลิงค์ } ลิงค์โครงสร้าง { var facebook: string var instagram: string var twitter: string } หรือพวกเขาควรจะหลวม? ฉันรู้ว่าทั้งสองวิธีใช้เทคนิคดี แต่สงสัยว่ามีวิธีแนะนำโดยทั่วไปหรือไม่โดยเฉพาะอย่างยิ่งสำหรับการอ่าน struct User { var firstName: string var lastName: string var …

1
ทำไมสวิฟท์จึงต้องมีโต๊ะสำหรับพยาน?
ฉันพยายามอ่านรายละเอียดการใช้งาน Swift และสิ่งหนึ่งที่ฉันไม่สามารถตะลึงได้คือ "โต๊ะพยาน" ดูเหมือนว่าพวกเขาเป็นตัวชี้ vtable แยกที่ใช้สำหรับ structs แต่ทำไมคุณต้องใช้มัน โครงสร้างจะถูกคัดลอกโดยค่าดังนั้นคุณจึงรู้อยู่แล้วในเวลารวบรวมว่าเป็นประเภทใด ดังนั้นคุณจะไม่เพียงรหัสยากที่วิธีการโทรและจะทำหรือไม่ ทำไมต้องทำการจัดส่งเสมือนกับวิธีการเหล่านี้

3
เหตุใด Swift initialise subclass จะต้องมีฟิลด์ที่เหมาะสมเป็นอันดับแรก
ในภาษา Swift เพื่อเริ่มต้นอินสแตนซ์หนึ่งต้องกรอกข้อมูลในฟิลด์ทั้งหมดของคลาสนั้นและจากนั้นเรียก superconstructor เท่านั้น: class Base { var name: String init(name: String) { self.name = name } } class Derived: Base { var number: Int init(name: String, number: Int) { // won't compile if interchange lines self.number = number super.init(name) } } สำหรับฉันดูเหมือนว่าย้อนหลังเนื่องจากต้องselfสร้างอินสแตนซ์ก่อนที่จะกำหนดค่าให้กับเขตข้อมูลและรหัสนั้นให้ความประทับใจราวกับว่าการผูกมัดเกิดขึ้นหลังจากการมอบหมายเท่านั้น นอกจากนั้นซูเปอร์คลาสยังไม่มีวิธีทางกฎหมายในการอ่านคุณสมบัติที่แนะนำของคลาสย่อยดังนั้นความปลอดภัยจะไม่นับในกรณีนี้ นอกจากนี้ภาษาอื่น ๆ อีกมากมายเช่น JavaScript และแม้แต่ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.