2015-06-30 3 views
2

здесь простая модель Синглтон в Swift, она исходит от:о шаблоне Singleton в Swift

https://github.com/hpique/SwiftSingleton

class Test { 
    static let shareTest = Test() 
    var a = 1 
    init() { 
     println("testSingeleTon") 
    } 
} 

и вот тест функции:

func testFunc() { 

     var s1 = Test.shareTest 
     var s2 = Test.shareTest 
     var s3 = Test.shareTest 
     var s4 = Test.shareTest 

     func printPointer(pointer: UnsafePointer<Test>) { 
      println(pointer) 
     } 

     printPointer(&s1) 
     printPointer(&s2) 
     printPointer(&s4) 
     printPointer(&s3) 

     println(s1.a) 
     println(s2.a) 
     println(s3.a) 
     println(s4.a) 

     s1.a = 4444 

     println("s2.a = \(s2.a)") 
     println("s3.a = \(s3.a)") 
     println("s4.a = \(s4.a)") 

    } 

и что i confused является результатом:

testSingeleTon 
0x00007fff54432ad8 
0x00007fff54432ad0 
0x00007fff54432ac0 
0x00007fff54432ac8 
1 
1 
1 
1 
s2.a = 4444 
s3.a = 4444 
s4.a = 4444 

он выглядит как шаблон singleTon, потому что просто присваивает значение s1.a, чем значение s2.a, s3.a, s4.a тоже изменилось, но если это действительно шаблон singleTon, почему & s1, & s2, & s3, & s4 совершенно разные ???

0x00007fff54432ad8 
0x00007fff54432ad0 
0x00007fff54432ac0 
0x00007fff54432ac8 
+0

на самом деле вы не печатаете значение s1, s2, s3, s4. Вы печатаете ячейку памяти для s1, s2, s3 и s4 с помощью & sign .... помните, что в этой памяти содержится один и тот же экземпляр –

+0

@anishparajuli , если вы хотите получить кредит за c вы должны отправить это как ответ, а не комментарий, а затем OP должен его принять. –

+0

ok..thanks я сделал это :) –

ответ

1

Каждая переменная s1, s2, s3, s4 содержит указатель на объект Test. Печать & s1 печатает местоположение этого указателя, а не местоположение объекта, на который указывает. Если вы хотите, чтобы напечатать адрес объекта, ссылка на объект указывает на

println(unsafeAddressOf(s1)) 
println(unsafeAddressOf(s2)) 

т.д.

source

source2 (Вопрос спросил я, чтобы понять это лучше)

+0

он работает !!! это то, что мне нужно !!! –

+0

это то, что вы просили ... пойдите и проверьте свой вопрос ?? его сумасшедший @ABLUE –

+0

:(извините ... это мой первый вопрос, мое описание недостаточно ясное, я буду улучшать в следующий раз, извините еще раз [email protected] –

0

Singletons before Swift 1.2 Благодаря Will M. для уточнения.

class ActivityIndicator { 

    class var sharedInstance: ActivityIndicator { 
     struct Singleton { 
      static let instance = ActivityIndicator() 
     } 
     return Singleton.instance 
    } 
} 
+0

спасибо за ответ, я попробовал, он работает, но :), у него та же проблема, результат & s1, & s2, & s3, & s4, разные: '0x00007fff5f8dcad8 0x00007fff5f8dcad0 0x00007fff5f8dcac0 0x00007fff5f8dcac8 s2.a = 4444 s3.a = 4444 s4.a = 4444' –

+0

http://stackoverflow.com/questions/24024549/dispatch-once-singleton -model-in-swift вам не нужно выполнять эту реализацию в Swift 1.2 и выше. –

2

Ну, вы не печатаете значение s1, s2, s3, s4..you печатает ячейку памяти для s1, s2, s3 и s4 с помощью & оператора ....

И помните, что в этой ячейке памяти содержится тот же экземпляр ..... Итак, вы хорошо знаете свой одноэлементный шаблон