SwiftでUserDefaultに構造体のArrayを保存したく、
以下のコードを書いたのですが、

// コンテンツを保持する構造体
struct ROContents : Codable {
    var idString_: String       // コンテンツを一意に識別するID文字列
    var titleString_: String    // タイトル文字列
    var readOutString_: String  // 読み上げる文字列

    // 規定イニシャライザ
    init() {
        idString_      = ""
        titleString_   = ""
        readOutString_ = ""
    }
}

・・・

func save() -> Bool {

    let userDefaults: UserDefaults = UserDefaults.standard

    let data = contentsArray_.map { try? JSONEncoder.encode($0) }
     ・・・

    return true
}

以下のエラーが出てしまいます。
'ROContents' is not convertible to 'JSONEncoder'
ROContentsで何らかのプロトコルを実装しないといけないのでしょうか。

=== 追記 ===

ご指摘頂いた通りに以下のようにメソッドを修正しました。

func save() -> Bool {

    let userDefaults: UserDefaults = UserDefaults.standard

    let encoder = JSONEncoder()
    do {
        let data = try encoder.encode(contentsArray_)
        userDefaults.set(data, forKey: "contentsArray")
    } catch {
        print(error)
        return false
    }

    userDefaults.set(contentsCounter_, forKey: "contentsCounter")

    return true
}

func load() -> Bool {

    let userDefaults: UserDefaults = UserDefaults.standard

    let decoder = JSONDecoder()
    do {
        let data = userDefaults.data(forKey: "contentsArray")
        contentsArray_ = try [decoder.decode(ROContents.self, from: data!)]
    } catch {
        print(error)
        return false
    }

    contentsCounter_ = userDefaults.integer(forKey: "contentsCounter")

    return true
}

実行してみた所
save()の方は問題なかったのですが、
load()の方は、以下のエラーが発生してしまいます。

typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary but found an array instead.", underlyingError: nil))

戻り値がDictionaryなのに、配列(Array)に入れようとしている。
ということだと思うのですが、decodeのやり方が間違っているのでしょうか。