質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.32%

extensionの書き方。extensionに引数を渡して処理を分岐したい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,059
退会済みユーザー

退会済みユーザー

いつもお世話になります。見当違いというか違う方法のほうがよい場合はご指摘ください。

doubleStringに変換する処理をdoubleextensionを記述して行いたいのですが。
引数を渡して返ってくるStringを変えるにはどのように書けばよいでしょうか?

↓とりあえず書いたもの

import Foundation

extension Double {
    var displayTimeStr: String {
        let sec = Int(self)
        let msec = Int((self - Double(sec)) * 100)
        let timeStr = NSString(format: "%02d:%02d:%02d.%02d", sec / 3600, sec % 3600 / 60, sec % 60, msec) as String
    return timeStr
    }
}

//呼びだし
let timeLabel.text = DoubleTime.displayTimeStr

↓こんな感じにしたいのですが、簡単にできるでしょうか?

import Foundation

// 引数に渡したいenum
enum timeStrType {
          case A
          case B
          case C
          case D
      }

// 引数を受け取りたいが(timeStrType: timeStrType)をどこに書いたらよいかイメージが浮かばない。
extension Double {
    var displayTimeStr: String {
        let sec = Int(self)
        let msec = Int((self - Double(sec)) * 100)

        let timeStr: String     
        switch timeStrType {
            case .A :
                timeStr = NSString(format: "%02d:%02d:%02d.%02d", sec / 3600, sec % 3600 / 60, sec % 60, msec) as String
            case .B :
                timeStr = NSString//省略
            case .C :
                timeStr = NSString//省略
            case .D :
                timeStr = NSString//省略
       }

    return timeStr
    }
}

//こんなふうに呼びだしたい
let timeLabel.text = DoubleTime.displayTimeStr(timeStrType: .A)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

プロパティじゃなくメソッドで。

extension Double {
    func displayTimeStr(timeStrType: timeStrType) -> String {
        let sec = Int(self)
        let msec = Int((self - Double(sec)) * 100)

        let timeStr: String
        switch timeStrType {
        case .A :
            timeStr = String(format: "%02d:%02d:%02d.%02d", sec / 3600, sec % 3600 / 60, sec % 60, msec)
        case .B :
            timeStr = "..."
        case .C :
            timeStr = "..."
        case .D :
            timeStr = "..."
        }

        return timeStr
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/09 16:57

    ありがとうございます。秒殺×2の回答を思いう浮かばない自分が悲しいです。

    キャンセル

+2

ん?

func displayTimeStr(timeStrType: TimeStrType) -> String {

※enumの名前変えてます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/09 16:57

    回答ありがとうございます。
    回答内容がほぼ同じで・回答時間全く同じなので…上に表示されているdaisuke7さんを便宜上ベストアンサーとさせていただきます。申し訳ないです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る