[swift] 일러스트를 통해서 알 수 있어요!class와 struct의 차이 [초보자용]
👨🏫"여기는 struct로 썼는데, 무슨 의미가 있습니까?"
🙍♀️「!」
🙍♀️상수만 열거했기 때문에 struct가 비교적 좋다고 생각합니다.
👨🏫"ㅋㅋ"
🙍♀️나는 솔직하게 말하고 싶었지만 별 의미가 없어서 struct를 선택했다.
👨🏫"ㅋㅋ"
이런 일이 있어서.
각자 뭐가 다른지 다시 정리를 해봤어요.٩( 'ω' )و
각각의 특징
우선 각자의 특징을 간단히 확인해 보자.
이미지 참조@lovee 기사.
포인트는 참고형인지 값형인지.🤔
그리고 코드를 쓴 후
struct
struct test {
let cat: String
let dog: String
}
/// -> 怒られない
classclass test {
let cat: String
let dog: String
}
/// -> 💥怒られる: Class 'test' has no initializers
반의 학우들은 초기화해 주십시오!이렇게 혼나고설치를 해보세요. 달라요.
class Cat {
var like: String = "魚"
}
struct Dog {
var like: String = "肉"
}
반에서 하는 물고기 좋아하는 사람.🐱유산으로 만든 고기랑 좋아하는 거.🐶.let tama: Cat = Cat()
let pochi: Dog = Dog()
func initWithData(_ data: Cat) {
var data = data
data.like = "マタタビ"
}
func initWithData2(_ data: Dog) {
var data = data
data.like = "マタタビ"
}
initWithData(tama)
initWithData2(pochi)
이것저것 가지고 와서 보여드리면...print(tama.like) // →"マタタビ"
print(pochi.like) // →"肉"
이런 결과.🐱내가 좋아하는 것은 생선에서 매운 생선으로 바뀌었다.이 집행 결과를 보면
class🐱참조 배송
var data = data
에서cat() 자체가 교부됨var tama: cat = cat()
자신에 대한 개작struct🐶실가로 납품했으니까.
var data = data
에cat()의 복사본 만들기var pochi: dog = dog()
스스로 다시 쓸 줄 모른다٩( 'ω' )و너 그거 알아?init를 사용하여 초기 값을 입력할 수도 있습니다.
class Cat {
var like: String
init(like: String) {
self.like = like
}
}
struct Dog {
var like: String
init(like: String) {
self.like = like
}
}
let tama: cat = Cat(like: "魚")
let pochi: dog = Dog(like: "肉")
하지만 이런 상황에서let tama: cat = Cat(like: "魚")
tama.like = "肉" // →"肉"
let pochi: dog = Dog(like: "肉")
pochi.like = "魚" // ERROR
.struct🐶나의 취향은 매우 강렬하다.이것은 struct의 가격 양도이다. 예를 들어 말하자면
솔리드(= 참조 class🐱)직접 수정할 수 있지만...
사진(= 값형 struct🐶)직접 가공할 수 없다(사진부터 올리는 가공.)
이런 인상은 괜찮아요.٩( 'ω' )و
공식 문서
애플공식 문서에는 struct는 다음과 같은 장소에서 사용하고, 이외에class를 사용하는 것이 좋다고 적혀 있다.(의역)
참고로 원래 발단으로 되어 있던 코드는 다음과 같다.
/// カラーの拡張(各所で、'let xxx = UIColor.mainGreenColor()'などと呼ぶ)
extension UIColor {
// UIColorへの変換
private func hexColor(_ str: String) -> UIColor {
// (略)ここでカラーコード→UIColorに変える
return UIColor(red: x, green: x, blue: x, alpha: 1.0)
}
// メインカラー
@objc static func mainGreenColor() -> UIColor {
return self.hexColor(ColorCode.mainGreenColor)
}
// バッチカラー
@objc static func badgeColor() -> UIColor {
return self.hexColor(ColorCode.badgeColor)
}
// カラーコード
struct ColorCode { // ←⭐️ここ
static let mainGreenColor: String = "#219E62"
static let badgeColor: String = "#FF3300"
}
}
각종 조사의 결과로"static만 취합된 변수이기 때문에 메모리 증가를 낭비하지 않기 위해 이런 관점도 사용하는 것이 좋다
class
."그걸 이해했어요.😇
최후
잘 조사하기 전에 팀에 따라 좋아하는 문제도 있다고 생각해요.
나는 다시 한 번 이해했고, 의사도 잘 분리해서 사용할 수 있었다٩( 'ω' )و
마지막
delegate=self 같은 건 여러 가지가 작게 접혀있어요.
다음 코드와 같은
CatViewData
데이터의 클래스를 제작하고 반복적으로 유지할 때생각 없이 사용했다
struct
. 그 결과 데이터가 전혀 업데이트되지 않았다(유지). 한 시간 동안 고민했다.😭!!!!!」그런 경험이 있어서.때로는 동작에 영향을 미칠 수 있기 때문에 이런 의미에서도 사용을 잘 고려해야 한다.
/// データ保持用クラス
// ↓structにすると、データを書き換えても値型でコピーされるだけなので、呼び直すタイミングで消えてしまう
class CatViewData {
var name: String
init(name: String) {
self. name = name
}
}
/// VC&Table用クラス
class TableViewDataSource: UIViewController, UITableViewDelegate, UITableViewDataSource {
var viewData: CatViewData
// ここでテーブルを更新
func reloadTable(viewData: CatViewData) {
tableView.reloadData()
self.initWithData(viewData: viewData)
}
// ここでデータを更新
func initWithData(viewData: CatViewData) {
self.viewData = viewData
}
// ~~略~~
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CatCell") as! CatCell
cell.setSettingCell(viewData: viewData)
return cell
}
func reloadTable(viewData: CatViewData) {
}
}
/// 表示用のセルクラス
protocol delegate {
func reloadTable(viewData: CatViewData)
}
class CatCell: UITableViewCell {
var viewData: CatViewData
func setSettingCell(viewData: viewData) {
self.viewData = viewData
}
@IBAction func buttonTapped(sender:AnyObject) {
self.viewData = "(textViewから入力したデータ)"
delegate.reloadTable(viewData: self.viewData)
}
}
간단해. 이거야.잘못된 점이 있으면 메시지를 남겨 주세요.
Reference
이 문제에 관하여([swift] 일러스트를 통해서 알 수 있어요!class와 struct의 차이 [초보자용]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/natya/items/24d9e68ff965f8da09ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)