1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swiftでの便利な拡張機能

Last updated at Posted at 2024-12-04

はじめに

Swiftは、そのシンプルさと強力な機能により、開発者にとって非常に魅力的なプログラミング言語だと思います。しかし、標準ライブラリだけではすべてのニーズを満たすことができない場合があります。(...よね??)そこで役立つのが「拡張」です。拡張を使用することで、既存の型に新しい機能を追加し、コードをより簡潔で読みやすくすることができます。本記事では、サンプルとしていくつかの拡張機能を紹介します!ぜひ、オリジナルの拡張機能を実装してコメントで教えていただけると勉強になります。

浮動小数点数の剰余算

FloatingPointプロトコルに%演算子を追加して、整数と同様に浮動小数点数の剰余を計算できるようにします。

extension FloatingPoint {
    static func % (lhs: Self, rhs: Self) -> Self {
        return lhs.truncatingRemainder(dividingBy: rhs)
    }
}

// 使用例
let result = 10.5 % 3.2
print(result) // 0.9000000000000004

文字列の繰り返し

Stringに*演算子を追加して、文字列を指定回数繰り返す機能を実装します。

extension String {
    static func * (lhs: String, rhs: Int) -> String {
        return String(repeating: lhs, count: rhs)
    }
}

// 使用例
let repeatedString = "Hello" * 3
print(repeatedString) // HelloHelloHello

配列の要素削除

Arrayに-演算子を追加して、特定の要素を削除する機能を実装します。

extension Array where Element: Equatable {
    static func - (lhs: inout Array, rhs: Element) {
        lhs.removeAll { $0 == rhs }
    }
}

// 使用例
var numbers = [1, 2, 3, 2, 4, 2, 5]
numbers - 2
print(numbers) // [1, 3, 4, 5]

文字列の切り詰め

文字列を特定の長さに切り詰める機能を追加します。

extension String {
    func truncate(to length: Int, addEllipsis: Bool = true) -> String {
        if self.count <= length {
            return self
        }
        let truncated = self.prefix(length)
        return addEllipsis ? truncated + "..." : String(truncated)
    }
}

// 使用例
let longString = "This is a very long string that needs to be truncated"
print(longString.truncate(to: 20)) // This is a very long...

日付のフォーマット

日付をフォーマットする便利なメソッドを追加します。

extension Date {
    func formatted(using format: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = format
        return formatter.string(from: self)
    }
}

// 使用例
let now = Date()
print(now.formatted(using: "yyyy-MM-dd HH:mm:ss")) // 2024-12-04 14:30:00

配列の重複除去

配列から重複要素を除去するメソッドを追加します。

extension Array where Element: Hashable {
    func removingDuplicates() -> [Element] {
        var addedDict = [Element: Bool]()

        return filter {
            addedDict.updateValue(true, forKey: $0) == nil
        }
    }
}

// 使用例
let numbers = [1, 2, 3, 2, 4, 3, 5]
let uniqueNumbers = numbers.removingDuplicates()
print(uniqueNumbers) // [1, 2, 3, 4, 5]

おわりに

これらの拡張機能を活用することで、Swiftでの開発がさらに効率的かつ楽しくなることでしょう。また、チーム開発の際には、拡張機能を共有することでコードの可読性や開発効率が向上します。ぜひ、自分自身のプロジェクトにもこれらの拡張を取り入れてみてください。そしてオリジナルの拡張機能を実装してみて下さい。コメントでの拡張機能の提案お待ちしております!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?