Быстрое необязательное сцепление с NSDictionary
Пожалуйста, помогите переделать это
if let field = parent_obj?.getFieldForCode(code) {
if let stored_value = field["value"] as? String {
в необязательный синтаксис цепочки в одну строку. Я пытался сделать это так:
let stored_value = parent_obj?.getFieldForCode(code)?["value"] as? String
и получил ошибку:
Type 'String' does not conform to protocol 'NSCopying'
Это мой заголовок функции:
func getFieldForCode(code: String) -> NSDictionary?
Является ли это возможным? Я спрашиваю об этом, потому что каждый раз, когда я работаю с NSArrays и NSDictionaries, мой код выглядит ужасно:
if let code = self.row_info["code"] as? String {
if let value_field = self.row_info["value_field"] as? String {
if let field = parent_obj?.getFieldForCode(code) {
if let stored_value = field["value"] as? String {
if let fields = self.fields_set{
if let current_value = fields[indexPath.row][value_field] as? String {
Любые советы?
1 ответ
Вы не можете разыграть его напрямую String
потому что вы тянете его из NSDictionary
и, как говорит ошибка, String
не соответствует NSCopying
, Тем не мение, String
соединен с NSString
, а также NSString
соответствует NSCopying
, Таким образом, с помощью небольшого количества хитростей приведения / связывания, вы можете заставить его работать так:
let stored_value: String? = parent_obj?.getFieldForCode(code)?["value"] as? NSString
Примечание: если вы используете это в необязательном связывании (которое выглядит так, как вы хотите), не забудьте опустить ?
от stored_value
объявление типа:
if let stored_value: String = parent_obj?.getFieldForCode(code)?["value"] as? NSString {
/* ... */
}