さまよえる、Android

Androidのプログラミングで便利なことや残しておきたいことを残しておく。もしオススメのライブラリがあったら教えてくださいね。

SwiftUIの複雑なレイアウト

余白をつけて、3分割する

 
GeometryReader { geometry in
            
            VStack {
                
                GeometryReader { geometry1 in
                    HStack(spacing: 0) {
                        
                        Text("1").frame(width: geometry1.size.width / 3)
                            .background(Color.green)
                        
                        Text("2").frame(width: geometry1.size.width / 3)
                            .background(Color.orange)
                        
                        Text("3").frame(width: geometry1.size.width / 3)
                            .background(Color.yellow)
                        
                    }
                    .background(Color.blue)
                }
                
            }
            .frame(width: geometry.size.width * 0.9)
            .frame(width: geometry.size.width)
            
        }
    }

さらに分割

struct Main_Footer: View {
    
    var body: some View {
        
        GeometryReader { geometry in
            
            VStack {
                
                GeometryReader { geometry in
                    HStack(spacing: 0) {
                        
                        Text("1").frame(width: geometry.size.width * 0.3)
                            .background(Color.green)
                        
                        Text("2").frame(width: geometry.size.width * 0.4)
                            .background(Color.orange)
                        
                        HStack(spacing: 0) {
                            Text("3")
                                .frame(maxWidth: .infinity)
                                .background(Color.blue)
                            Text("4")
                                .frame(maxWidth: .infinity)
                                .background(Color.black)

                        }
                        .frame(width: geometry.size.width * 0.3)
                        .background(Color.yellow)
                        
                        
                    }
                    .background(Color.blue)
                }
                
            }
            .frame(width: geometry.size.width * 0.9)
            .frame(width: geometry.size.width)
            
        }
    }
}
 GeometryReader { geometry in
            VStack {
                GeometryReader { geometry in
                    HStack(spacing: geometry.size.width * 0.03) {
                        
                        Text("1")
                            .frame(maxWidth: .infinity, maxHeight: .infinity)
                            .background(Color.white)
                        
                        Text("2")
                            .frame(maxWidth: .infinity, maxHeight: .infinity)
                            .background(Color.white )
                    }

                }
            }
            .frame(width: geometry.size.width * 0.9, height: geometry.size.height)
            .frame(width: geometry.size.width)
        }

Codableでクラス継承対応

import UIKit

var data = """
{
    "A": "A",
    "B": "B",
    "C": "C",
}
"""

class A : Codable {
    
    var A:String = "A"
    
    enum CodingKeys: String, CodingKey {
        case A = "A"
    }
    
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(A, forKey: .A)
    }
}

class B: A {
    
    var B:String = "B"

    enum CodingKeys: String, CodingKey {
        case B = "B"
        case A = "A"
    }
    
    override func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(B, forKey: .B)
        try container.encode(A, forKey: .A)
    }
}

var b = B()
b.A = "やべい"
b.B = "すごい"

var enc = try! JSONEncoder().encode(b)
print(String(data: enc, encoding: .utf8)!)


var a = A()
a.A = "どすこい"

var enc1 = try! JSONEncoder().encode(a)
print(String(data: enc1, encoding: .utf8)!)