2016-12-21 1 views
1

Я работаю над преобразованием swift 2.3 в swift 3.0;Swift 2.3 to Swift 3.0 получить неоднозначную ошибку ссылки на членство '

Swift 2,3 Код:

extension ContextDidSaveNotification: CustomDebugStringConvertible { 
    public var debugDescription: String { 
     var components = [notification.name] 
     components.append(managedObjectContext.description) 
     for (name, set) in [("inserted", insertedObjects), ("updated", updatedObjects), ("deleted", deletedObjects)] { 
      let all = set.map { $0.objectID.description }.joinWithSeparator(", ") 
      components.append("\(name): {\(all)}") 
     } 
     return components.joinWithSeparator(" ") 
    } 
} 

Swift 3,0 Код:

extension ContextDidSaveNotification: CustomDebugStringConvertible { 
    public var debugDescription: String { 
     var components = [notification.name] 
     components.append(Notification.Name(rawValue: managedObjectContext.description)) 
     for (name, set) in [("inserted", insertedObjects), ("updated", updatedObjects), ("deleted", deletedObjects)] { 
      let all = set.map { $0.objectID.description }.joined(separator: ", ") 
      components.append(Notification.Name(rawValue: "\(name): {\(all)}")) 
     } 
     return components.joined(separator: " ") 
    } 
} 

Но я получил сообщение об ошибке: Неоднозначность ссылка на memeber 'присоединился()' для LĀSE возвращения в коде Swift 3.0.

Как решить эту проблему? Я много исследовал, но не нашел рабочего решения.

Благодаря

+0

Попробуйте явно объявить тип инициализации var компонентов. –

+2

'Notification.Name' - это структура в Swift 3, а не строка - это не то, что' join() 'ожидает – vadian

ответ

3

joined(separator:) объявлен для Array<String>, а не Array<Notification.Name>:

// somewhere in standard library 
extension Array where Element == String { 

    public func joined(separator: String = default) -> String 
} 

Как @vadian отметил, Notification.Name не эквивалентно String, так что вам нужно, чтобы преобразовать массив первой. Это должно работать:

components 
    .map({ $0.rawValue }) 
    .joined(separator: " ")