Swift Extension을 통한 클래스 분할
10435 단어 Swift
잘못, 의견, 감상, 자기가 이렇게 쓰는 거야!기다리시면 꼭 메모 남겨주세요.
사용하는 X코드는 8.3.3입니다.
어떻게 써요?
한 반은 Extension으로 여러 자로 나뉜다.나는 대체로 아래의 기준에 따라 구분한다.
대체로 대략적인 기준일 뿐, 하나의 Extension이 길어졌다는 생각에 분리된 것도 있다.그곳은 융통성이 있어야 한다.
견본
import UIKit
// MARK: vars and lifecycle
class ViewController: UIViewController {
@IBOutlet fileprivate weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.setupUI()
}
}
// MARK: - UI
extension ViewController {
fileprivate func setupUI() {
self.setupHeader()
self.setupTableView()
}
private func setupHeader() {
self.title = "hoge"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "fuga", style: .plain, target: self, action: #selector(self.didTapRightBarButton(_:)))
}
private func setupTableView() {
self.tableView.dataSource = self
self.tableView.delegate = self
}
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
// MARK: - UITableViewDelegate
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// do something
}
}
// MARK: - actions
extension ViewController {
func didTapRightBarButton(_ sender: UIBarButtonItem) {
// do something
}
@IBAction func didTapButton1(_ sender: UIButton) {
// do something
}
@IBAction func didTapButton2(_ sender: UIButton) {
// do something
}
}
좋은 일
전망이 피다
코드를 보자마자 무슨 블록인지 알 수 있다.댓글로 나누는 방법도 있지만 개인적으로 그것보다 외관이 더 예쁘다고 생각해요.
요약 관련 처리
UI 관련 처리, 정계자 및 접근법 등 근접 처리를 함께 적으면 읽기 쉬운 코드다.
proivte의 범위가 좁아짐
나는 일부 속성/방법을 만들 수 있다고 생각한다. 예를 들어 어떤 방법의 조수 방법 등은 반 전체에서 볼 수 없어도 된다.
이 경우 Extension으로 분리하여 provate를 미리 추가하면 가시성을 줄일 수 있습니다.
나쁘다고 생각하는 일
유형량이 많아지다
분리된 부분extension クラス名
만 쓰니까 좀 귀찮아요.
기본적으로 복제품이어서 장점이 다른 것보다 훨씬 크기 때문에 신경 쓸 필요가 없다.
할 수 있었으면 좋겠어요.
store property 사용
Extension에서 store property를 정의할 수 없습니다.
컴퓨터property라면 정의할 수 있기 때문에 매번 계산할 수 있는 것은 그것을 사용합니다.
컨디션을 유지하고 싶을 때 반에서 정의한 곳에 속성을 쓰는 것을 포기한다.
어떤 Extension 이외에 사용하지 않는 속성이 자주 나오기 때문에 정의할 수 없습니까?
IBOutlet/IBAction에 직접 연결
IBcontrol+ドラッグ
에서 줄을 당겨도 Extension 내에서는 반응이 없다.
코드 핸드@IBAction func didTapButton1(_ sender: UIButton) { ...
처럼 저장할 때 나오는 링을 IB로 당기면 연결할 수 있다.
좀 귀찮으니까 엑텐션에 좀 끌려가면 안 될까.
계약 실행 시 위치 제한
어떤 Extension에서 협의의 실시를 선언하더라도 그 반이 협의를 실시한다고 선언했을 뿐이다.
선언 내용과 다른 엑텐션으로도 가능하다는 것이다.
이렇게// プロトコルの実装は宣言するけど中身はなし
extension ViewController: UITableViewDataSource {}
// こちらでUITableViewDataSourceを実装する
extension ViewController {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
쓴 사람은 주의해야 하지만 발표하는 곳에서도 반드시 실시해야 한다는 것이 어려운가.
끝말
나는 같은 것을 총괄하고 다른 것을 분리하는 것이 디자인의 기본이라고 생각한다.MV~
등에 비하면 아주 작은 일일지도 모르지만, 이런 작은 일로 코드의 읽기 쉬운 성질을 바꿀 수 있다고 생각해서 더 좋은 방법을 모색하고 싶습니다.
Reference
이 문제에 관하여(Swift Extension을 통한 클래스 분할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yaruki00/items/a0eee0a9050c410bd266
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
유형량이 많아지다
분리된 부분
extension クラス名
만 쓰니까 좀 귀찮아요.기본적으로 복제품이어서 장점이 다른 것보다 훨씬 크기 때문에 신경 쓸 필요가 없다.
할 수 있었으면 좋겠어요.
store property 사용
Extension에서 store property를 정의할 수 없습니다.
컴퓨터property라면 정의할 수 있기 때문에 매번 계산할 수 있는 것은 그것을 사용합니다.
컨디션을 유지하고 싶을 때 반에서 정의한 곳에 속성을 쓰는 것을 포기한다.
어떤 Extension 이외에 사용하지 않는 속성이 자주 나오기 때문에 정의할 수 없습니까?
IBOutlet/IBAction에 직접 연결
IBcontrol+ドラッグ
에서 줄을 당겨도 Extension 내에서는 반응이 없다.
코드 핸드@IBAction func didTapButton1(_ sender: UIButton) { ...
처럼 저장할 때 나오는 링을 IB로 당기면 연결할 수 있다.
좀 귀찮으니까 엑텐션에 좀 끌려가면 안 될까.
계약 실행 시 위치 제한
어떤 Extension에서 협의의 실시를 선언하더라도 그 반이 협의를 실시한다고 선언했을 뿐이다.
선언 내용과 다른 엑텐션으로도 가능하다는 것이다.
이렇게// プロトコルの実装は宣言するけど中身はなし
extension ViewController: UITableViewDataSource {}
// こちらでUITableViewDataSourceを実装する
extension ViewController {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
쓴 사람은 주의해야 하지만 발표하는 곳에서도 반드시 실시해야 한다는 것이 어려운가.
끝말
나는 같은 것을 총괄하고 다른 것을 분리하는 것이 디자인의 기본이라고 생각한다.MV~
등에 비하면 아주 작은 일일지도 모르지만, 이런 작은 일로 코드의 읽기 쉬운 성질을 바꿀 수 있다고 생각해서 더 좋은 방법을 모색하고 싶습니다.
Reference
이 문제에 관하여(Swift Extension을 통한 클래스 분할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yaruki00/items/a0eee0a9050c410bd266
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// プロトコルの実装は宣言するけど中身はなし
extension ViewController: UITableViewDataSource {}
// こちらでUITableViewDataSourceを実装する
extension ViewController {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
나는 같은 것을 총괄하고 다른 것을 분리하는 것이 디자인의 기본이라고 생각한다.
MV~
등에 비하면 아주 작은 일일지도 모르지만, 이런 작은 일로 코드의 읽기 쉬운 성질을 바꿀 수 있다고 생각해서 더 좋은 방법을 모색하고 싶습니다.
Reference
이 문제에 관하여(Swift Extension을 통한 클래스 분할), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yaruki00/items/a0eee0a9050c410bd266텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)