Objective C에서는 #pragma mark
심볼 탐색기에서 코드 섹션을 표시 하는 데 사용할 수 있습니다 . 이 명령은 C 전 처리기 명령이므로 Swift에서는 사용할 수 없습니다. Swift에 이것에 대한 스탠드 인이 있습니까, 아니면 추악한 주석을 사용해야합니까?
Objective C에서는 #pragma mark
심볼 탐색기에서 코드 섹션을 표시 하는 데 사용할 수 있습니다 . 이 명령은 C 전 처리기 명령이므로 Swift에서는 사용할 수 없습니다. Swift에 이것에 대한 스탠드 인이 있습니까, 아니면 추악한 주석을 사용해야합니까?
답변:
당신이 사용할 수있는 // MARK:
어쨌든 클래스 확장을 자유롭게 사용하는 것이 더 나은 방법 일 수도 있다는 논의가있었습니다. 확장은 프로토콜을 구현할 수 있으므로 모든 테이블 뷰 대리자 메서드를 확장에 넣고 코드를 #pragma mark
가능한 의미보다 더 의미있는 수준으로 그룹화 할 수 있습니다.
// MARK:
, // TODO:
그리고 // FIXME
점프 줄에 스위프트 소스 및 목록을합니다. (BTW, 그것은 이미 (Obj) C 소스에서 수행되었습니다- #pragma mark
유일한 방법은 아닙니다.) 그리고 그래도 메뉴에 구분 기호를 추가 -
하기 위해 추가 할 수 있습니다 MARK
.
MARK
지금 작업 하더라도 확장을 사용하여 의미 적으로 관련된 일부 코드 (특히 프로토콜 구현)를 그룹화하는 것이 여전히 유용 할 수 있습니다. IMHO 그것은 파일의 상단에 5 개의 프로토콜 선언과 50 개의 관련 메소드 구현이 아래 어딘가에 흩어져 있지 않고 그것을 구현하는 메소드 옆에 프로토콜 준수 선언을 훨씬 잘 읽습니다.
#pragma mark
. // MARK: -
는 구분자 일 뿐이며 // MARK: - stuff
구분자와 헤더를 // MARK: - stuff -
제공하며 한 줄에 구분자, 헤더 및 다른 구분자를 모두 제공합니다.
전 처리기 지시문 #pragma mark
이 Xcode 5 까지 존재했습니다.
Xcode 6부터는 // MARK:
이러한 전 처리기 기능을 통해 소스 코드 편집기의 기능 드롭 다운 상자에 일부 구조를 가져올 수 있습니다.
몇 가지 예 :
// MARK:
-> 앞에 가로 구분선이 붙습니다.
// MARK: your text goes here
-> 드롭 다운 목록에 '텍스트가 여기에옵니다'를 굵게 표시합니다.
// MARK: - your text goes here
-> 드롭 다운 목록에 굵은 글씨로 '텍스트가 여기에옵니다'를 넣고 가로 구분선이옵니다.
업데이트 : 일부 사람들이 여전히 문제가있는 것 같아서 스크린 샷을 추가했습니다.
// MARK: - text
나를 위해 및 목록 쇼의 드롭 다운 텍스트 : MARK를 대신의 텍스트를 .
확장 기능과 pragma 마크 (첫 번째 주석에서 언급)를 사용하는 데 관심이있는 사용자를 위해 Swift 엔지니어가이를 구현하는 방법은 다음과 같습니다.
import UIKit
class SwiftTableViewController: UITableViewController {
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SwiftTableViewController {
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let cell = tableView?.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell;
cell.textLabel.text = "Hello World"
return cell
}
}
또한 반드시 모범 사례는 아니지만 원하는 경우 방법입니다.
typealias
. 예를 들면 typealias DataSource = SwiftTableViewController
. 그때extension Datasource {}
UITableViewController
는 프로토콜이 아니며 클래스입니다. 당신은 아마 의미 UITableViewControllerDataSource
하지만, 이것은 예제에서 사용 된 패턴이 아닙니다.
extension
프로토콜을 사용하여 헤더를 얻지 못했는지 궁금합니다. 왜 extension SwiftTableViewController : UITableViewController
그 확장을 클래스에 추가했는지 더 쉽게 읽을 수 있습니다.
extension SwiftTableViewController : UITableViewDelegate { .. }
와extension SwiftTableViewController : UITableViewDatasource { .. }
Pragma mark - [SOME TEXT HERE]
Objective-C에서 라인 분리로 여러 기능을 그룹화 하는 데 사용되었습니다 .
Swift 에서는 다음을 사용하여 이것을 달성 할 수 있습니다MARK, TODO OR FIXME
나는. 마크 : //MARK: viewDidLoad
이렇게하면 viewDidLoad (스크린 샷 1에 표시) 아래에 함수가 그룹화 된 수평선 이 생성 됩니다.
ii. 할 것 : //TODO: - viewDidLoad
TODO에서 기능을 그룹화합니다 :-viewDidLoad 카테고리 (스크린 샷 2에 표시)
iii. 나를 해결 : //FIXME - viewDidLoad
FIXME에서 기능을 그룹화합니다 :-viewDidLoad 카테고리 (스크린 샷 3에 표시)
자세한 내용은 이 사과 설명서 를 확인 하십시오.
Xcode Jump Bar에 관한 Apple의 공식 문서 : 점프 바에 코드 주석 추가
!!!:
그리고 ???:
때로는 표시 할 수 없습니다.
Objective-C 코드에서 Xcode는 // MARK: - foo
보다 약간 이식하기 쉬운 주석을 감지 #pragma
합니다. 그러나 이것들도 픽업되지 않은 것 같습니다 (아직?).
편집 : Xcode 6 베타 4에서 수정되었습니다.
// MARK: -
현재 작동하지 않는 것을 확인할 수 있습니다 .
// MARK:
을 사용 중이며 작동하지 않는 것 같습니다. 나는 공백없이 &로, 콜론과 함께 그리고없이, 모든 대문자와 혼합 (마크)을 시도했습니다. 트릭이 있습니까? 준비 또는 무언가를 활성화해야합니까?
Extensions
대신에 더 좋은 방법 이라고 생각 #pragma mark
합니다.
사용하기 전에 코드 Extensions
:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
...
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
사용 후 코드 Extensions
:
class ViewController: UIViewController {
...
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
}
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
extension
Xcode의 이동 경로 제어의 드롭 다운 메뉴에서 단독으로 눈에 띄지 않기 때문에 둘 다 사용합니다 .
// ARK:
Xcode 8에서 나와 비슷 합니다
!!!
및 ???
구문은 ... 엑스 코드 8.3.3에 작동하는 표시되지 않습니다
WWDC에서 오늘 아침 Swift 연구소의 Apple 엔지니어와 함께 현재 #pragma 또는 이와 동등한 것이 없음을 확인했으며, 버그로 간주하고 곧 도착할 것이므로 베타 2를 추측하고 싶습니다.
어쨌든, 그것은 길에 있습니다.
Xcode는 이제 // MARK :, // TODO : 및 // FIXME 랜드 마크를 지원하여 코드에 주석을 달고 점프 막대에 나열합니다.
사용하다
// MARK: SectionName
또는
// MARK: - SectionName
이것은 pragma 마크 위에 줄을 표시하여 더 읽기 쉽게 만듭니다.
쉽게 추가하기 위해
// MARK: - <#label#>
코드 스 니펫에.
다른 방법-
이런 식으로 사용하십시오
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
이것은 pragma 마크와 같은 마크를 추가 할뿐만 아니라 코드를 멋지게 분리합니다.
//MARK
형식 (공백없이) 및 제안 // MARK: (text)
( 한 칸 사이 //
와 MARK, 공백없이 사이 MARK
와 :
, 그리고 하나 개의 공간 사이 :
와 섹션 이름)
Swift 4.2 / XCode 10 컴파일러 지시문에 관심이있을 수도 있습니다.
#warning("Some string to display")
과
#error("Some error to display")
정말로 무언가를 놓치고 싶지 않을 때 유용 할 수 있습니다.
//MARK:
Xcode 6.3.2에서 작동 하지 않는 것 같습니다 . 그러나 이것이 내가 작동하게하기 위해 한 일입니다 .
1) 코드 :
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2) : 주석을 jump bar
추가하면 아무것도 바뀌지 않는 것으로 보입니다 //MARK
. 그러나 점프 막대에서 가장 오른쪽에있는 이름을 클릭하면 필자 MainWindowController(with a leading C icon)
의 경우 // MARK : 주석의 효과, 즉 "나의 멋진 방법"이라는 제목을 나타내는 팝업 창이 표시됩니다.
3) 또한 코드에서 메소드 중 하나를 클릭하면 메소드가 점프 막대에서 가장 오른쪽에있는 항목이됩니다. MainWindowController(with a leading C icon)
점프 막대에서 가장 오른쪽 에 들어가려면 메서드 위의 공백을 클릭해야합니다.
Apple은 최신 버전의 Building Cocoa Apps 에서
Swift 컴파일러에는 전처리 기가 포함되어 있지 않습니다. 대신 컴파일 타임 속성, 빌드 구성 및 언어 기능을 활용하여 동일한 기능을 수행합니다. 이러한 이유로 전 처리기 지시문은 Swift에서 가져 오지 않습니다.
# 문자는 여전히 다양한 빌드 구성 및 이와 유사한 작업을 수행하는 방식으로 보이지만 pragma의 맥락에서 대부분의 전처리에 대한 필요성을 줄이고 다른 언어 기능으로 전달하려고하는 것처럼 보입니다. 아마도 이것은 완전히 컴파일 된 코드에 최대한 가깝게 동작하는 놀이터와 REPL의 작동을 돕기위한 것입니다.
해야할 일 항목 추가 : 접두사 TODO :로 주석을 삽입하십시오. 예를 들면 다음과 같습니다. // TODO : [your to-do item].
버그 수정 알림 추가 : 접두사 FIXME :로 주석을 삽입하십시오. 예 : // FIXME : [버그 수정 알림].
제목 추가 : 접두사 MARK :로 주석을 삽입하십시오. 예를 들면 다음과 같습니다. // MARK : [귀하의 섹션 제목].
구분선 추가 : 주석 위에 구분자를 추가하려면 주석의 주석 부분 앞에 하이픈 (-)을 추가하십시오. 예를 들면 다음과 같습니다. // MARK :-[콘텐츠]. 주석 아래에 구분 기호를 추가하려면 주석의 주석 부분 뒤에 하이픈 (-)을 추가하십시오. 예를 들면 다음과 같습니다. // MARK : [콘텐츠]-.
Pragma 마크는 코드의 가독성을 향상시키는 방법입니다. pragma 주석은 Xcode 점프 바에서 태그처럼 나타납니다.
//MARK: <Your comment goes here>
예 : 코드에서
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
이것이 Xcode 점프 바에 나타나는 방식입니다.