1

Swift 2 で、Apple は API の可用性チェックを導入しました。これにより、次のように、指定されたバージョン以降でのみ特定のコードを実行できるようになります。

if #available(iOS 9, *) {
    // use UIStackView
} else {
    // use fallback
}

たとえば、iOS 9.0 では次のlocalizedUppercaseStringプロパティが導入されています。

/// An uppercase version of the string that is produced using the current
/// locale.
public var localizedUppercaseString: String { get }

私が望むのは、9.0 より前のバージョンでのみ使用できるこのプロパティの正確なレプリカを作成することです。そのため、if #available(iOS 9, *)この (または他の) プロパティ/メソッドを使用する必要があるたびに確認する必要はありません。

私が得ることができた最良の結果は次のとおりです。

extension String {

    @available(iOS 8.0, *)
    var localizedUppercaseString: String {

        return uppercaseStringWithLocale(NSLocale.currentLocale())
    }
}

localizedUppercaseStringこれで、iOS のバージョンが 8.0 か 9.0 かに関係なく、を呼び出すことができます。問題は、この拡張機能を iOS 9.0 で実行すると、「元の」プロパティがオーバーライドされることです。

4

1 に答える 1

2
extension String {

    var myLocalizedUppercaseString: String {
        if #available(iOS 9, *) {
            return localizedUppercaseString
        } else {
            return uppercaseStringWithLocale(NSLocale.currentLocale())
        }
    }
}

myLocalizedUppercaseStringあとは、プロパティを使用するだけです。

于 2015-11-03T18:33:10.690 に答える