После обновления до строки xcode 9.2, отображающей проблему двусмысленности [duplicate]

Для клика ImageView вам нужно создать пользовательский адаптер для вашего списка.

И в методе adfater getView() просто напишите imageView's onClick(), и начните свою новую деятельность с onClick () этого изображения.

Для пользовательского списка просто посмотрите на этот учебник Серия Android: пользовательские элементы и адаптеры ListView ..

2
задан DMSilva 30 March 2016 в 18:52
поделиться

4 ответа

Отчет об ошибке, поданный OP:

Что было разрешено (исправлено для овладения 3 января 2017 г.), и, следовательно, больше не будет проблемой в предстоящем Swift 3.1.


Это кажется ошибкой (не присутствует в Swift 2.2, всего 3.0), связанный со случаем:

  • Использование оператора принудительной разворачивания (!) для не менее 3 членов выражения (проверено с использованием, по меньшей мере, 2 основных операторов, например + или -).
  • По какой-то причине, учитывая вышеизложенное, Swift испортил вывод типа выражения (в частности, для самих членов x! в выражении).

Для всех приведенных ниже примеров пусть:

let a: String? = "a"
let b: String? = "b"
let c: String? = "c"

Присутствует ошибка:

// example 1
a! + b! + c!
    /* error: ambiguous reference to member '+' */

// example 2
var d: String =  a! + b! + c!
    /* error: ambiguous reference to member '+' */

// example 3
var d: String? =  a! + b! + c!
    /* error: cannot convert value of type 'String' 
       to specified type 'String?' */

// example 4
var d: String?
d =  a! + b! + c!
    /* error: cannot assign value of type 'String' 
       to specified type 'String?' */

// example 5 (not just for type String and '+' operator)
let a: Int? = 1
let b: Int? = 2
let c: Int? = 3
var d: Int? = a! + b! + c!
    /* error: cannot convert value of type 'Int' 
       to specified type 'Int?' */
var e: Int? = a! - b! - c! // same error

Ошибка отсутствует:

/* example 1 */
var d: String? = a! + b!

/* example 2 */
let aa = a!
let bb = b!
let cc = c!
var d: String? = aa + bb + cc
var e: String = aa + bb + cc

/* example 3 */
var d: String? = String(a!) + String(b!) + String(c!)

Однако, поскольку это Swift 3.0-dev, я не уверен, что это действительно «ошибка», а также то, что политика сообщая «ошибки» в еще не-производственной версии кода, но, возможно, вы должны на этот раз подать радар для этого.

Что касается ответа на ваш вопрос, как обойти эту проблему:

  • использовать, например, промежуточные переменные, как в Ошибка отсутствует: пример 2 выше,
  • или явно сказать Swift все члены в трехчленном выражении являются строками, как в Ошибка отсутствует: Пример 3 выше,
  • или, еще лучше, используйте безопасную разворачивание вашего дополнительного, например используя необязательное связывание :
    var d: String? = nil
    if let a = a, b = b, c = c {
        d = a + b + c
    } /* if any of a, b or c are 'nil', d will remain as 'nil';
         otherwise, the concenation of their unwrapped values   */
    
8
ответ дан dfri 16 August 2018 в 03:30
поделиться
let val: String? = "nil"

val.flatMap({(str: String) -> String? in
    return str + "value"
})
0
ответ дан Artyom 16 August 2018 в 03:30
поделиться
func getSingleValue(_ value: String?..., seperator: String = " ") -> String? {

    return value.reduce("") {
        ($0) + seperator + ($1 ?? "")
        }.trimmingCharacters(in: CharacterSet(charactersIn: seperator) )
}
0
ответ дан noob 16 August 2018 в 03:30
поделиться

Swift 3

let q: String? = "Hello"
let w: String? = "World"
let r: String? = "!"
var array = [q, w, r]

print(array.flatMap { $0 }.reduce("", {$0 + $1}))
// HelloWorld!


let q: String? = "Hello"
let w: String? = nil
let r: String? = "!"
var array = [q, w, r]

print(array.flatMap { $0 }.reduce("", {$0 + $1}))
// Hello!
1
ответ дан Tikhonov Alexander 16 August 2018 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: