Xcode สามารถ refactor รหัส C และ Objective-C เท่านั้น จะเปลี่ยนชื่อคลาส Swift ใน Xcode 6 ได้อย่างไร?


103

ฉันได้สร้างโครงการแอปพลิเคชันมุมมองเดียวใหม่ใน Xcode 6 เวอร์ชันเบต้า ฉันต้องการเปลี่ยนชื่อคลาสที่รวดเร็วจากViewController.swiftเป็นชื่ออื่น แต่เมื่อผมเลือก Refactor -> Xcode can only refactor C and Objective-C codeเปลี่ยนชื่อก็ให้ข้อผิดพลาด

ป้อนคำอธิบายภาพที่นี่

มีความคิดอย่างไรในการเปลี่ยนชื่อคลาสที่รวดเร็วใน Xcode 6?

อัพเดท:

ในที่สุด Xcode 9 ก็รองรับการปรับโครงสร้างสำหรับ Swift Apple ใช้เวลา 3 ปีในการเพิ่มคุณสมบัติพื้นฐานนี้ Refactoring


9
ตอนนี้ยังไม่มี รายงานข้อบกพร่อง
jtbandes

19
กว่าหนึ่งปีหลังจากถูกถามคำตอบเดียวคือการค้นหาและเปลี่ยนด้วยตนเอง! Apple ถอยหลังอย่างไม่น่าเชื่อนี่เป็นคุณสมบัติพื้นฐานและจำเป็นสำหรับ IDE
HughHughTeotl

1
AppCode สามารถทำการ refactoring นี้ได้สำเร็จ จะเป็นกระบวนการสองขั้นตอนสำหรับคลาสของคุณที่กำหนดไว้ใน.swiftไฟล์ 1. เลือกชื่อชั้นและดำเนินการRefactor> เปลี่ยนชื่อ 2. เลือก.swiftไฟล์และดำเนินการRefactor> เปลี่ยนชื่อ
Daniel Zhang

5
แม้จะผ่านไปสองปี !!! ไม่ได้ดำเนินการ???
Milad Faridnia

เป็นเรื่องที่ดีจริงๆในการนำความทรงจำในอดีตกลับมาในขณะที่คัดลอกและวาง 100 รายการใน C
LegendLength

คำตอบ:


25

คุณสามารถเปลี่ยนชื่อคลาสใน File Inspector ที่ด้านขวาของ Xcode6

  • เปิดชั้นเรียนของคุณ
  • ไปที่ตัวตรวจสอบไฟล์> ระบุและพิมพ์ส่วน
  • เปลี่ยนชื่อคลาสที่มีอยู่ในฟิลด์ "ชื่อ"

นั่นคือทั้งหมด! ก่อนหน้านี้ฉันเปลี่ยนชื่อคลาสด้วยตนเองในไฟล์คลาส


11
ขอบคุณสำหรับการตอบกลับ แต่จะเปลี่ยนเฉพาะชื่อคลาสในโครงสร้างไฟล์เท่านั้น ฉันยังคงต้องเปลี่ยนชื่อชั้นเรียนของฉันทุกที่ในโค้ด ในขณะที่ใช้ Refactor-> Rename ... ใช้เพื่อเปลี่ยนชื่อในโครงสร้างไฟล์และในโค้ด
Khawar

ไม่มีปัญหา! ฉันแค่คิดว่ามันเป็นวิธีแก้ปัญหาชนิดหนึ่งจนกว่า Apple จะทำอะไรกับปัญหานี้ คุณสามารถใช้ฟังก์ชันค้นหาและแทนที่ได้เช่นกันจนถึงวันนั้น ไม่ว่าในกรณีใดก็ตามที่สร้างขึ้นใน Refactor-> เปลี่ยนชื่อเกือบจะดำเนินการแบบเดียวกัน
ใหม่

1
@Newone มันไม่ทำแบบเดิม ตัวอย่างเช่น Find and Replace จะค้นหาภายในสตริงและ Refactor-> Rename ไม่ควรทำเช่นนั้น
Martin Epsz


12

ฉันใช้วิธีนี้:

  • คุณสามารถวางตำแหน่งเคอร์เซอร์บนตัวแปรที่คุณต้องการเปลี่ยนชื่อได้
  • เลือก Editor - แก้ไขทั้งหมดใน Scope (^ ⌘E)
  • เปลี่ยนชื่อตัวแปรและแก้ไขการเกิดตัวแปรทั้งหมดโดยอัตโนมัติ

สิ่งนี้ช่วยได้ ทึ่งมากพลาดนานขนาดนี้ !! :]
hdsenevi

1
สิ่งนี้ใช้ได้เฉพาะภายในขอบเขตเท่านั้นไม่ใช่ข้ามไฟล์ IIRC
Steve Moser

10

จากบทช่วยสอนนี้

แยก iOS8 Swift Code ของคุณ

ก่อนอื่นเรามาเปลี่ยนชื่อ View Controller ของเราให้มีความหมายมากขึ้น เปิดไฟล์ ViewController.swift ของคุณและแทนที่การอ้างอิงทั้งหมดของ 'ViewController' ด้วยชื่อใหม่ของเรา 'SearchResultsViewController' เปลี่ยนชื่อไฟล์เป็น SearchResultsViewController.swift

หากคุณพยายามเรียกใช้แอปจากที่นี่คุณจะพบข้อขัดข้อง เนื่องจากไฟล์สตอรี่บอร์ดของเรายังไม่ได้รับการอัปเดตเพื่อรับทราบเกี่ยวกับคลาสใหม่! ดังนั้นเปิด Main.storyboard เลือกวัตถุ 'View Controller' ของคุณในฉาก (การนำทางด้านซ้ายมือ) จากนั้นเลือก Identity Inspector (ด้านขวามือปุ่มที่สาม)

จากที่นี่ให้เปลี่ยนคลาสจาก 'ViewController' เป็น 'SearchResultsViewController' ตอนนี้เราควรจะกลับมาติดตาม ตรวจสอบว่าโครงการยังใช้งานได้และดำเนินการต่อ


ขอบคุณสำหรับการตอบ. ฉันได้ทดลองวิธีนี้แล้ว แต่ดูเหมือนจะไม่ใช่วิธีที่ดี ถ้าฉันใช้ออบเจ็กต์ ViewController.swift ใน 10 คลาสฉันต้องเปลี่ยนชื่อด้วยตนเองในทุกคลาส เจ็บปวดและเสียเวลามาก :(
Khawar

@ Khawar- ใช่คุณพูดถูก แต่ตอนนี้อาจไม่มีตัวเลือกอื่นและสวิฟต์ก็อยู่ในรุ่นเบต้าเช่นกัน ไม่ต้องกังวลไป .. หวังว่า apple จะพบวิธีอื่นที่ง่ายกว่านี้ (วัตถุประสงค์ c ???) :)
iPatel

1
ฉันใช้เวอร์ชัน 7.2 (7C68) และการเปลี่ยนชื่อใหม่ยังไม่สามารถทำได้
Barbara R

ใน 7.3 ยังเป็นไปไม่ได้
ManiaChamp


2

Xcode 9

Xcode 9 รองรับการเปลี่ยนชื่อใน Swift แล้ว ประกาศใน WWDC 2017

ป้อนคำอธิบายภาพที่นี่


ขอบคุณขอบคุณ Apple แต่การเปลี่ยนชื่อยังใช้ไม่ได้ ตอนนี้มันขัดข้อง Xcode
kisileno

จริง ... ณ เวอร์ชัน 9.0 เบต้าการเปลี่ยนชื่อทำให้ Xcode ขัดข้อง แต่นี่คือสิ่งที่ควรจะทำงานในอนาคตเมื่อใดก็ตามที่อาจเป็นเช่นนั้น :)
Guy Daher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.