Нет индексации с использованием целых чисел, только с использованием String.Index
. В основном с линейной сложностью. Вы также можете создавать диапазоны из String.Index
и получать подстроки, используя их.
Swift 3.0
let firstChar = someString[someString.startIndex]
let lastChar = someString[someString.index(before: someString.endIndex)]
let charAtIndex = someString[someString.index(someString.startIndex, offsetBy: 10)]
let range = someString.startIndex..<someString.index(someString.startIndex, offsetBy: 10)
let substring = someString[range]
Swift 2.x
let firstChar = someString[someString.startIndex]
let lastChar = someString[someString.endIndex.predecessor()]
let charAtIndex = someString[someString.startIndex.advanceBy(10)]
let range = someString.startIndex..<someString.startIndex.advanceBy(10)
let subtring = someString[range]
Обратите внимание, что вы никогда не сможете использовать индекс ( или диапазон), созданный из одной строки в другую
let index10 = someString.startIndex.advanceBy(10)
//will compile
//sometimes it will work but sometimes it will crash or result in undefined behaviour
let charFromAnotherString = anotherString[index10]
Имейте в виду, что все приведенные здесь ответы - это варианты того, как сделать более трудным или раздражающим для кого-то повторное размещение вашей вспышки. Невозможно помешать кому-то это сделать, если только ваша способность обфускировать вашу защиту не превосходит способность злоумышленника де-запутать их.
Что касается того, что я бы сделал, я бы разбрызгал свои код с битами вроде этого:
// in a display object
if ( loaderInfo.url != "http://example.com/my/real/content.swf" ) {
// blow up
}
Это должно остановить любого, у кого нет доступа к декомпилятору. Если этого недостаточно, единственный выход - вложиться в обфускатор, потому что все, что вы делаете, не будет иметь никакого значения, если ваш код не будет запутан.
1- Обфускируйте свой ActionScript с помощью расширенного обфускатора, такого как secureSWF .
2- Блокируйте свои SWF-файлы доменом.
3- Создайте фиктивный загрузчик, переименуйте исходные файлы SWF и измените их расширение, а затем загрузите исходные файлы SWF с помощью фиктивного загрузчика.
4- Убедитесь, что предотвращены горячие ссылки. (это будет зависеть от вашего веб-сервера)
5- Зашифруйте конфиденциальные строки в своем ActionScript; либо вручную в коде, либо для этого можно использовать secureSWF.
Вы можете затруднить кражу ваших SWF-файлов, если вы поступаете так же, как Webkinz, поскольку у них есть один основной фильм, встроенный в страницу (чтобы пользователь знал URL-адрес этого фильма) . Все последующие фильмы загружаются в исходный фильм программно. Конечно, кто-нибудь, у кого есть флэш-декомпилятор, может декомпилировать ваш фильм и увидеть пути, но, опять же, вы можете даже столкнуться с проблемой неясности имен этих MovieClips.
Это в основном зависит от программного обеспечения вашего веб-сервера. Если PHP, вы можете использовать readfile (). См. Пример здесь . Сохраните сам .swf над корневым веб-каталогом, затем используйте некоторую аутентификацию перед вызовом readfile. В этой настройке вы вызываете php-файл с помощью вызова readfile () вместо .swf.
Таким образом, это может выглядеть в очень упрощенном виде примерно так: fakeswf.php:
if (authenticate()) {
header("Content-Type: application/flash");
readfile("../realswf.swf");
}
else {
header("Content-Type: text/html");
echo "Nothing to see here.";
}
index.html:
<a href="fakeswf.php">Click here to play my game</a>
Что касается браузера (если вы правильно настроили заголовки в соответствии с примером), fakeswf.php является файлом .swf.
ВАЖНОЕ ПРИМЕЧАНИЕ: I на самом деле не удалось найти правильный тип содержимого для файла .swf. Обязательно найдите его и измените соответствующим образом.