Подтвердить что ты не робот

Каково использование ключевого слова "static", если ключевое слово "let" используется для определения констант/неизменных в swift?

Я немного запутался в использовании статического ключевого слова в swift. Как мы знаем, swift вводит ключевое слово let для объявления неизменяемых объектов. Как объявление идентификатора ячейки таблицы, которая, скорее всего, не изменится в течение всего срока ее службы. Теперь о том, что используется ключевое слово static в некотором объявлении struct like:

struct classConstants
{
    static let test = "test"
    static var totalCount = 0
}

тогда как ключевое слово let делает то же самое. В Objective C мы использовали static для объявления некоторой константы, например

static NSString *[email protected]"cellId";

Кроме того, мне любопытно использовать ключевое слово static, а также let, а также var. Может ли кто-нибудь объяснить мне, где использовать это статическое ключевое слово? Что еще более важно, нам действительно нужно static в swift?

4b9b3361

Ответ 1

Я сломаю их для вас:

  • var: используется для создания переменной
  • let: используется для создания константы
  • static: используется для создания свойств типа с помощью let или var. Они распределяются между всеми объектами класса.

Теперь вы можете комбинировать, чтобы получить желаемый результат:

  • static let key = "API_KEY": постоянное свойство типа
  • static var cnt = 0: свойство типа, которое является переменной
  • let id = 0: постоянная (может быть назначена только один раз, но может быть назначена во время выполнения)
  • переменная var price = 0: переменная

Таким образом, чтобы подвести итог все var и позволить определить изменчивость в то время как статические и отсутствие определения области. Вы можете использовать static var чтобы отслеживать, сколько экземпляров вы создали, в то время как вы можете использовать просто var для цены, которая отличается от объекта к объекту. Надеюсь, это немного прояснит ситуацию.

Пример кода:

class MyClass{
    static let typeProperty = "API_KEY"
    static var instancesOfMyClass = 0
    var price = 9.99
    let id = 5

}

let obj = MyClass()
obj.price // 9.99
obj.id // 5

MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0

Ответ 2

Статическая переменная используется во всех экземплярах класса. Добавьте этот пример в детскую площадку:

class Vehicle {
    var car = "Lexus"
    static var suv = "Jeep"
}

// changing nonstatic variable
Vehicle().car // Lexus
Vehicle().car = "Mercedes"
Vehicle().car // Lexus

// changing static variable
Vehicle.suv // Jeep
Vehicle.suv = "Hummer"
Vehicle.suv // Hummer

Когда вы изменяете переменную для статического свойства, это свойство теперь изменяется во всех будущих экземплярах.

Ответ 3

Статические переменные относятся к типу, а не к экземпляру класса. Вы можете получить доступ к статической переменной, используя полное имя типа.

код:

class IOS {

  var iosStoredTypeProperty = "iOS Developer"

  static var swiftStoredTypeProperty = "Swift Developer"

 }

 //Access the iosStoredTypeProperty by way of creating instance of IOS Class

let iOSObj = IOS()

print(iOSObj.iosStoredTypeProperty)  // iOS Developer


 //print(iOSObj.swiftStoredTypeProperty) 
 //Xcode shows the error 
 //"static member 'swiftStoredTypeProperty' cannot be used on instance of type IOS"


 //You can access the static property by using full name of the type
print(IOS.swiftStoredTypeProperty)  // Swift Developer

Надеюсь, это поможет вам.

Ответ 4

"Ключевое слово let определяет константу" запутанно для новичков, которые исходят из фона С# (например, меня). В терминах С# вы можете думать о "let" как переменной "readonly" .

(ответ на Как именно ключевое слово "let" работает в Swift?)

Используйте static и let для определения константы

public static let pi = 3.1416            // swift

public const double pi = 3.1416;         // C#
public static final double pi = 3.1416   // Java     

Когда я использую let для определения константы, мне кажется, что я использую readonly для С#. Поэтому я использую как static, так и let для определения константы в swift.

Ответ 5

чтобы увидеть разницу между свойствами типа и/или методами, а также свойствами класса и/или методами, просмотрите этот пояснительный пример из apple docs

class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}

Статические свойства могут быть объявлены только по типу, а не по всему миру. Другими словами, свойство static свойство === type в Swift. Чтобы объявить свойство type, вы должны использовать статическое ключевое слово.

Ответ 6

Не путай себя

Позвольте мне привести пример в реальном времени

class bowl{
  static var  meatball=4
  init(){}
 }

  var hungrydog=bowl() // dog is hungry , meatball is  served
  var hungrycat=bowl() // cat is hungry , meatball is  served

   // if pets are not obeying any words we can punish them by serving less
    bowl.meatball=2