2016-01-25 90 views
0

下面的代码是从这样的回答:https://stackoverflow.com/a/28191539/4096655排序添加到阵列包装类

public class SynchronizedArray<T> { 
    private var array: [T] = [] 
    private let accessQueue = dispatch_queue_create("SynchronizedArrayAccess", DISPATCH_QUEUE_SERIAL) 

    public func append(newElement: T) { 
     dispatch_async(self.accessQueue) { 
      self.array.append(newElement) 
     } 
    } 

    public subscript(index: Int) -> T { 
     set { 
      dispatch_async(self.accessQueue) { 
       self.array[index] = newValue 
      } 
     } 
     get { 
      var element: T! 

      dispatch_sync(self.accessQueue) { 
       element = self.array[index] 
      } 

      return element 
     } 
    } 
} 

var a = SynchronizedArray<Int>() 
a.append(1) 
a.append(2) 
a.append(3) 

// can be empty as this is non-thread safe access 
println(a.array) 

// thread-safe synchonized access 
println(a[0]) 
println(a[1]) 
println(a[2]) 

我做的事情很喜欢,但我有麻烦建立一种传递到仿制药的阵列。理想情况下,我想要一个sortInPlace,但不知道如何去做。

回答

1

如果要包装的数组进行排序,再一个办法是限制T的类型符合Comparable。如果添加了这个限制,那么排序功能很容易实现,只需问阵列本身进行排序:

public class SynchronizedArray<T: Comparable> { 

... 

public func sortInPlace() { 
    array.sortInPlace(<) 
} 

对于定制类,你需要添加符合Comparable一个扩展,超载==<运营商(参考here

extension MyClass: Comparable { 

} 

func ==(lhs: MyClass, rhs: MyClass) -> Bool { 

} 

func <(lhs: MyClass, rhs: MyClass) -> Bool { 

} 

var a = SynchronizedArray<MyClass>() 
+0

我将如何指定对象的属性进行排序? –

+0

我看到它只是对可比较的符合性中定义的内容进行排序,这将起作用,谢谢! –